将用户详细信息放在spring-security.xml中的会话中

时间:2014-02-24 12:05:21

标签: spring spring-mvc spring-security

我有以下spring-security.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
    xmlns:beans="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/security
    http://www.springframework.org/schema/security/spring-security-3.0.xsd">

    <http auto-config="true">
           <intercept-url pattern="/ADMIN/**" access="ROLE_ADMIN" />
           <form-login default-target-url="/" login-page="/login.jsp" />
           <logout logout-url="/logout" logout-success-url="/" />
    </http>

    <authentication-manager>
           <authentication-provider>
             <jdbc-user-service data-source-ref="dataSource" 
               users-by-username-query="select user_name,password, enabled from Users where user_name=?"  
               authorities-by-username-query="select u.user_name, u.role from Users u where u.user_name =?"/>                 
           </authentication-provider>
    </authentication-manager>

</beans:beans>

如何在用户登录网站后将用户详细信息放入会话中,如username和user_id等。

2 个答案:

答案 0 :(得分:0)

登录后,Session&amp;中已有一个安全上下文。 ThreadLocal的。你可以这样称呼它:

 SecurityContextHolder.getContext()...

答案 1 :(得分:0)

您可以检索已登录用户的用户名。然后,您可以使用用户名从数据库中检索用户特定信息。

UserDetails userDetails = (UserDetails)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
String userName = userDetails.getUsername();

或者您始终可以使用HttpSession对象在会话中存储属性。

@RequestMapping(..)
public String myControllerMethod(HttpSession session) {
    session.addAttribute("username", "test123");
}

您还可以使用HttpServletRequest对象在会话中存储属性。

@RequestMapping(..)
public String myControllerMethod(HttpServletRequest request) {
    request.getSession().setAttribute("userName", "test123");
}