相反:如何使用Spring Security手动注销用户?
在我的应用程序中,我 注册了一个新用户屏幕 ,该 屏幕 发布到一个控制器中,该控制器在db中创建一个新用户(并进行了一些明显的检查)。然后我希望这个新用户自动登录…我有点想要某种东西像这样 :
SecurityContextHolder.getContext().setPrincipal(MyNewUser);
编辑 好吧,我几乎已经基于如何使用Spring Security3.1以编程方式登录用户的答案实现了
Authentication auth = new UsernamePasswordAuthenticationToken(MyNewUser, null); SecurityContextHolder.getContext().setPrincipal(MyNewUser);
但是,部署后,jsp无法访问my,MyNewUser.getWhateverMethods()而遵循常规登录过程时,jsp无法访问。正常工作的代码如下,但在登录时抛出错误:
MyNewUser.getWhateverMethods()
<sec:authentication property="principal.firstname" />
在我的控制器中,我有这个,可以 正常 登录用户:
Authentication auth = new UsernamePasswordAuthenticationToken(user, null, user.getAuthorities()); SecurityContextHolder.getContext().setAuthentication(auth);
其中user是我新创建的自定义用户对象(实现UserDetails)。该getAuthorities()方法执行此操作(只是因为我所有的用户都具有相同的角色):
getAuthorities()
public Collection<GrantedAuthority> getAuthorities() { //make everyone ROLE_USER Collection<GrantedAuthority> grantedAuthorities = new ArrayList<GrantedAuthority>(); GrantedAuthority grantedAuthority = new GrantedAuthority() { //anonymous inner type public String getAuthority() { return "ROLE_USER"; } }; grantedAuthorities.add(grantedAuthority); return grantedAuthorities; }