我想将其他用户信息存储在像userId这样的cookie中,用户名和密码。当我使用spring security记住我的功能时,我可以从cookie中获取用户名。
在spring-security.xml中我使用自定义userDetailService,我已经像
那样实现了它 <http>
......
<logout invalidate-session="true"
logout-success-url="/"
logout-url="/logout.htm"/>
<remember-me user-service-ref="myUserDetailsService" key="89dqj219dn910lsAc12" token-validity-seconds="864000"/>
</http>
<authentication-manager>
<authentication-provider user-service-ref="myUserDetailsService">
<password-encoder ref="myEnocdePassword" >
<salt-source user-property="username"/>
</password-encoder>
</authentication-provider>
</authentication-manager>
<beans:bean id="myEnocdePassword" class="com.mycom.myproject.utility.MyEnocdePassword" />
在MyUserDetailService.java中,我有类似
的代码 @Override
public UserDetails loadUserByUsername(String username)
throws UsernameNotFoundException, DataAccessException {
try {
boolean enabled = true;
boolean accountNonExpired = true;
boolean credentialsNonExpired = true;
boolean accountNonLocked = true;
com.mycom.myproject.db.mybatis.model.User domainUser = userService.getUserByName(username);
return new User(
domainUser.getUsername(),
domainUser.getPassword(),
enabled,
accountNonExpired,
credentialsNonExpired,
accountNonLocked,
getAuthorities(domainUser.getRoleId);
} catch (Exception e) {
throw new RuntimeException(e);
}
在我的控制器类中,我可以使用
获取用户名 String name = SecurityContextHolder.getContext().getAuthentication()
.getName();
但我想将其他用户详细信息存储在像userId这样的cookie中。我怎么能这样做?我是否需要通过userDao(名称)获取用户信息,然后手动将用户信息存储在cookie中?
答案 0 :(得分:3)
在这种情况下,您无需对Cookie执行任何操作。
只要用户登录(无论他如何登录 - 使用登录表单或“记住我”),您都可以从UserDetails
访问该用户的SecurityContext
,Spring Security会照顾它的。
因此,您只需要将所需信息放入UserDetails
中的UserDetailsService.loadUserByUsername()
(如有必要,请使用您自己的UserDetails
子类),然后通过{{1}访问它}:
SecurityContext
换句话说,当Spring Security收到没有活动会话的请求但记住了我的cookie时,它会使用cookie中的用户身份加载Authentication auth = SecurityContextHolder.getContext().getAuthentication();
if (auth != null) {
Object principal = auth.getPrincipal();
if (principal instanceof UserDetails) {
UserDetails user = (UserDetails) principal;
... // User is logged in, now you can access its details
}
}
并将它们放入UserDetails
(并进入新创建的)会话会议)。稍后您可以从SecurityContext
。
答案 1 :(得分:0)
通常已有Cookie! 您可以将值存储在会话中。
如果您想长时间存储这些值,可以使用Session-Passivation。