2015-08-27 17 views
6

Po prostu rozpoczynam programowanie z Spring Security, a napisałem system, w którym zapisuję użytkowników w tabeli, utrzymując się przez Hibernate. Używając odnośnika Spring Security napisałem ten fragment kodu:Jak dodać nowego użytkownika do Spring Security w środowisku wykonawczym

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"); 
    } 
} 

To działa idealnie, ale jest pewien punkt - użytkownik jest ładowany podczas startu serwera. Muszę napisać metodę RegisterUser (User user), która dodaje nowego użytkownika do Spring Security w środowisku wykonawczym. Ta metoda powinna skupiać się tylko na tym zadaniu. Nie wiem, jak zacząć wdrażać tę funkcję, więc dziękuję za wszelkie porady! ;)

Ofc Użytkownik ma pól takich jak login, hasło, rola sznurka itp itd ...

Proszę nie zakładać rozwiązują z wiosny MVC. System ten jest relaksującego app przy użyciu Boost, Wiosna internetową i zwiększyć Wiosna Security w wersji 4.0.x

+0

Ktoś pomoże? –

+0

Istnieją przykłady Spring Security + Hibernate, przeszukaj je. Na przykład: http://www.mkyong.com/spring-security/spring-security-hibernate-annotation-example/ – holmis83

+0

Czy znalazłeś rozwiązanie swojego problemu, czy możesz napisać kod? –

Odpowiedz

3

Prawdopodobnie chcesz przechowywać swoich użytkowników w bazie danych, a nie w pamięci, jeśli są one rejestracji :)

  1. Tworzenie authorities dla użytkownika

    List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>(); 
    authorities.add(new SimpleGrantedAuthority("ROLE_USER")); 
    
  2. instancję użytkownika (z klasą realizacji UserDetails)

    UserDetails user = new User("[email protected]", passwordEncoder.encode("s3cr3t"), authorities); 
    
  3. Zachowaj użytkownika w jakimś przydatnym miejscu. JdbcUserDetailsManager może łatwo zapisać użytkownika do bazy danych.

    userDetailsManager.createUser(user); 
    
  4. Tworzenie UsernamePasswordAuthenticationToken

    Authentication authentication = new UsernamePasswordAuthenticationToken(user, null, authorities); 
    
  5. Dodaj uwierzytelniania z wykorzystaniem SecurityContext

    SecurityContextHolder.getContext().setAuthentication(authentication); 
    
+1

Gdzie mogę utworzyć tego użytkownika i SecurityContext? –

+0

@PhilippJahoda SecurityContext jest tworzony przez Spring. Użytkownik powinien utworzyć użytkownika w logice rejestracji po uzyskaniu informacji od użytkownika (takich jak nazwa użytkownika i hasło), prawdopodobnie w warstwie usługi używanej przez kontroler. –

+0

Dziękuję za odpowiedź. Używam adresu URL spring provided/oauth/token, czy to nie jest poprawne? Gdzie mogę uzyskać dostęp do nazwy użytkownika i hasła podanego w tym adresie URL? –

0

ten kod, aby dodać uprawnienia do bieżącego użytkownika:

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) 
     ); 
Powiązane problemy