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

我刚刚开始使用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");
    }
}

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

OFC用户有像登录,密码,角色字符串等等字段...

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


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

  • 为用户创建权限

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

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

    userDetailsManager.createUser(user);
    
  • 创建一个UsernamePasswordAuthenticationToken

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

    SecurityContextHolder.getContext().setAuthentication(authentication);
    

  • 使用此代码为当前用户添加权限:

    List<GrantedAuthority> authorities = new ArrayList<>();
    authorities.add(new SimpleGrantedAuthority("ROLE_NEWUSERROLE'); 
        SecurityContextHolder.getContext().setAuthentication(
            new UsernamePasswordAuthenticationToken(
                SecurityContextHolder.getContext().getAuthentication().getPrincipal(),
                SecurityContextHolder.getContext().getAuthentication().getCredentials(),
                authorities)
            );
    
    链接地址: http://www.djcxy.com/p/28593.html

    上一篇: How to adding new user to Spring Security in runtime

    下一篇: Sending an array of objects via AJAX