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

2024-02-26

其相反:如何使用 Spring Security 手动注销用户? https://stackoverflow.com/q/5727380/106261

在我的应用程序中我有注册新用户屏幕,它发布到一个控制器,该控制器在数据库中创建一个新用户(并进行一些明显的检查)。然后我希望这个新用户自动登录......我有点想要这样的东西:

SecurityContextHolder.getContext().setPrincipal(MyNewUser);

Edit好吧,我几乎已经根据答案实施了如何使用 Spring Security 3.1 以编程方式登录用户 https://stackoverflow.com/q/7614541/106261

 Authentication auth = new UsernamePasswordAuthenticationToken(MyNewUser, null);
 SecurityContextHolder.getContext().setPrincipal(MyNewUser);

但是,部署后jsp无法访问我的MyNewUser.getWhateverMethods()而当遵循正常登录过程时就会出现这种情况。正常工作但在登录时抛出错误的代码如下:

<sec:authentication property="principal.firstname" /> 

在我的控制器中我有这个,它可以让用户登录像平常一样 :

Authentication auth = 
  new UsernamePasswordAuthenticationToken(user, null, user.getAuthorities());

SecurityContextHolder.getContext().setAuthentication(auth);

其中 user 是新创建的自定义用户对象(实现 UserDetails)。这getAuthorities() http://docs.spring.io/autorepo/docs/spring-security/3.2.7.RELEASE/apidocs/org/springframework/security/core/userdetails/UserDetails.html#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;
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 spring security 以编程方式登录用户 的相关文章

随机推荐