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

标签 spring-mvc spring-security

相反: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/

相关文章:

java - 如何让 Spring MVC 读取日期格式为 "2019-3-29"的路径参数?

spring-security - Thymeleaf + Spring Security 表达语言

java - 如何强制我的模板解析器对/mail/* 模板使用 ClassLoaderTemplateResolver

javascript - 如何从返回 JSON 的 REST Web 服务加载 ng 表中的数据

java - 尝试在 spring mvc 中创建并保存对象列表

spring-security - AuthorizationServerSecurityConfigurer 中的 Realm 方法的用途是什么?

authentication - 登录后Grails 3重定向

spring-security - QueryDslPredicateExecutor 和 Spring Data Rest 方面的安全上下文

grails - gorm-couchdb grails 插件和 spring-security-core 插件集成

java - 当使用 Spring MVC 生成数据时在另一个数据表中单击一行时,启动一个包含数据的新数据表