spring - 如何在运行时将新用户添加到 Spring Security

我通过 Hibernate 将用户保存在数据库表中,并且我正在使用 Spring Security 进行身份验证:

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.context.annotation.*;
import org.springframework.security.config.annotation.authentication.builders.*;
import org.springframework.security.config.annotation.web.configuration.*;

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth
            .inMemoryAuthentication()
                .withUser("user").password("password").roles("USER");
    }
}

这很好用,但有一点 - 用户在服务器启动期间被加载。我需要编写在运行时将新用户添加到 Spring Security 的方法 RegisterUser(User user)。这种方法应该只关注这个任务。我不知道如何开始实现此功能,所以感谢您的任何建议! ;)

Ofc 用户具有登录名、密码、角色字符串等字段...

请不要使用 Spring MVC 发布解决方案。本系统是使用 Spring Web Boost 和 Spring Security Boost 4.0.x 版本的 RESTful 应用程序

最佳答案

如果用户正在注册,您可能希望将用户存储在数据库中而不是内存中:)

  1. 创建authorities为用户

    List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
    authorities.add(new SimpleGrantedAuthority("ROLE_USER"));
    
  2. 实例化用户(使用实现 UserDetails 的类)

    UserDetails user = new User("user@example.com", passwordEncoder.encode("s3cr3t"), authorities);
    
  3. 将用户保存在有用的地方。 JdbcUserDetailsManager可以轻松地将用户保存到数据库。

    userDetailsManager.createUser(user);
    
  4. 创建 UsernamePasswordAuthenticationToken

    Authentication authentication = new UsernamePasswordAuthenticationToken(user, null, authorities);
    
  5. 将身份验证添加到 SecurityContext

    SecurityContextHolder.getContext().setAuthentication(authentication);
    

https://stackoverflow.com/questions/32244745/

相关文章:

java - 使用 Spring JavaConfig 和 @Autowired 注入(inject

spring - java 9模块从A和B读取包X

java - Spring MVC : Resolving the view based on Us

java - spring mvc 表单 :select tag

java - 如何使用spring websocket向自定义用户发送自定义消息?

java - Spring Security 3 - 总是返回错误 302

java - 在 Spring Hibernate java 项目中使用 "Envers"审计表

java - Spring WS : How to get and save XSD validat

spring - Spring Boot 2 中的 EmbeddedServletContainer

spring - 如何在 apache 基准测试工具中限制每秒请求