如何在运行时向Spring Security添加新用户

Prz*_*ski 14 spring persistence registration spring-security maven

我通过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");
    }
}
Run Code Online (Sandbox Code Playgroud)

这很有效,但有一点 - 用户在服务器启动时加载.我需要编写方法RegisterUser(用户用户),在运行时将新用户添加到Spring Security.此方法应仅关注此任务.我不知道如何开始实现此功能,所以感谢任何建议!;)

Ofc用户有登录,密码,角色等等字段...

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

Nei*_*gan 9

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

  1. 为用户创建权限

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

    UserDetails user = new User("user@example.com", passwordEncoder.encode("s3cr3t"), authorities);
    
    Run Code Online (Sandbox Code Playgroud)
  3. 将用户保存在有用的地方.该JdbcUserDetailsManager可以将用户保存到数据库容易.

    userDetailsManager.createUser(user);
    
    Run Code Online (Sandbox Code Playgroud)
  4. 创建UsernamePasswordAuthenticationToken

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

    SecurityContextHolder.getContext().setAuthentication(authentication);
    
    Run Code Online (Sandbox Code Playgroud)