一尘不染

使用Spring Security以编程方式登录用户

spring-mvc

相反:如何使用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" />

阅读 364

收藏
2020-06-01

共1个答案

一尘不染

在我的控制器中,我有这个,可以 正常 登录用户:

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;
    }
2020-06-01