복붙노트

[SPRING] 런타임시 새로운 사용자를 Spring Security에 추가하는 방법

SPRING

런타임시 새로운 사용자를 Spring Security에 추가하는 방법

Hibernate를 통해 DB 테이블에 사용자를 저장하고 인증을 위해 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로 솔루션을 게시하지 마십시오. 이 시스템은 버전 4.0.x에서 Spring Web Boost와 Spring Security Boost를 사용하는 RESTful 앱이다.

해결법

  1. ==============================

    1.사용자가 등록하는 경우 데이터베이스가 아닌 메모리에 사용자를 저장하려고합니다. :)

    사용자가 등록하는 경우 데이터베이스가 아닌 메모리에 사용자를 저장하려고합니다. :)

  2. ==============================

    2.이 코드를 사용하여 현재 사용자에게 권한을 추가하십시오.

    이 코드를 사용하여 현재 사용자에게 권한을 추가하십시오.

    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)
            );
    
  3. from https://stackoverflow.com/questions/32244745/how-to-add-new-user-to-spring-security-at-runtime by cc-by-sa and MIT license