相反:How to manually log out a user with spring security?
在我的应用程序中,我有注册新用户屏幕,它会发布到一个 Controller ,该 Controller 在数据库中创建一个新用户(并进行一些明显的检查)。然后我希望这个新用户自动已登录...我想要这样的东西:
SecurityContextHolder.getContext().setPrincipal(MyNewUser);
编辑 好吧,我几乎已经根据 How to programmatically log user in with Spring Security 3.1 的答案实现了
Authentication auth = new UsernamePasswordAuthenticationToken(MyNewUser, null);
SecurityContextHolder.getContext().setPrincipal(MyNewUser);
但是,部署后,jsp 无法访问我的 MyNewUser.getWhateverMethods()
,而在正常登录过程中却可以访问。正常工作但在像上面一样登录时抛出错误的代码如下:
<sec:authentication property="principal.firstname" />
最佳答案
在我的 Controller 中,我有这个,它可以正常登录用户:
Authentication auth =
new UsernamePasswordAuthenticationToken(user, null, user.getAuthorities());
SecurityContextHolder.getContext().setAuthentication(auth);
其中 user 是新创建的自定义用户对象(实现 UserDetails)。 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;
}
关于spring-mvc - 使用 spring security 以编程方式登录用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7900994/