Skip to main content
 首页 » 编程设计

spring-mvc之使用 spring security 以编程方式登录用户

2024年02月27日35insus

相反: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; 
    }