2014-09-16 45 views
18

Tüm kullanıcıları, uygulamanın ilk yüklemesi sırasında AuthenticationManagerBuilder içine yüklemeyi başardım, ancak sonradan kullanıcı eklemeyi başlatma gereksinimim var.Kullanıcıları inMemoryAuthentication oluşturucuya oluşturulduktan sonra nasıl ekleyebilirim?

Başlangıç:

public class WebSecurityConfig extends WebSecurityConfigurerAdapter 

... 

auth.inMemoryAuthentication().withUser(email).password(password).roles(roles.toArray(new String[roles.size()])).and().passwordEncoder(encoder()); 

Bu bir zamana için çok çalıştığını, ancak uygulama çalışırken kullanıcıların eklenebilen bir kullanım durum var.

Bu yöntemi başlatma sonrası (denetleyici/hizmet aracılığıyla) hangi yöntemle yapabilirim? Ben InMemoryUserDetailsManager (createUser() yöntemini içerir) olabileceğini düşünüyorum, ancak nasıl başvurulacağını veya yapılandırılacağını emin değilim.

cevap

24

Aşağıdaki kod soruyorsun yapacak:

@Configuration 
@EnableWebMvcSecurity 
public class WebSecurityConfig extends WebSecurityConfigurerAdapter { 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     //whatever here 
    } 

    @Override 
    protected void configure(AuthenticationManagerBuilder auth) throws Exception { 
     auth.userDetailsService(inMemoryUserDetailsManager()); 
    } 

    @Bean 
    public InMemoryUserDetailsManager inMemoryUserDetailsManager() { 
     final Properties users = new Properties(); 
     users.put("user","pass,ROLE_USER,enabled"); //add whatever other user you need 
     return new InMemoryUserDetailsManager(users); 
    } 

} 

kullanma InMemoryUserDetailsManager sadece ekler ve bir kullanıcının varlığını denetler gibi görünür bir süper basit denetleyici yukarıda yapılandırılan:

@RestController 
@RequestMapping("user") 
public class SimpleSecurityController { 

    private final InMemoryUserDetailsManager inMemoryUserDetailsManager; 

    @Autowired 
    public SimpleSecurityController(InMemoryUserDetailsManager inMemoryUserDetailsManager) { 
     this.inMemoryUserDetailsManager = inMemoryUserDetailsManager; 
    } 

    @RequestMapping("exists/{username}") 
    public boolean userExists(@PathVariable("username") String username) { 
     return inMemoryUserDetailsManager.userExists(username); 
    } 

    @RequestMapping("add/{username}/{password}") 
    public String add(@PathVariable("username") String username, @PathVariable("password") String password) { 
     inMemoryUserDetailsManager.createUser(new User(username, password, new ArrayList<GrantedAuthority>())); 
     return "added"; 
    } 
} 

Ayrıca Bahar Boot adlı otomatik yapılandırma kullanıyorsanız eklemeniz gerekir unutmayın

@EnableAutoConfiguration(exclude = SecurityAutoConfiguration.class) 

Security otomatik yapılandırır çalışmasını Bahar Boot önlemek için

Güncelleme @AdamMichalik tarafından belirtildiği gibi, @EnableWebMvcSecurity artık kullanılmamaktadır ve @EnableWebSecurity

0

değiştirilmesi gerektiğini ben bu kodu değişti :

inMemoryUserDetailsManager.createUser(new User(username, password, new ArrayList<GrantedAuthority>())); 

@ geoend's cevap den:

inMemoryUserDetailsManager.createUser(User.withUsername(username).password(password).roles("USER").build()); 

Varsayılan olarak, yeni bir kullanıcının herhangi bir izni yoktur.

İlgili konular