使用Spring Security以编程方式登录用户
相反:如何使用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无法访问。正常工作的代码如下,但在登录时抛出错误:
<sec:authentication property="principal.firstname" />回答:
在我的控制器中,我有这个,可以 正常 登录用户:
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 Security以编程方式登录用户 的全部内容, 来源链接: utcz.com/qa/400876.html
