2015-08-27 28 views
6

我剛剛開始使用Spring Security進行編程,並且我編寫了系統,通過Hibernate將表中的用戶保存在表中。以Spring Security參考我寫的這個塊的代碼:如何在運行時向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加速和Spring Security的提振4.0.x版

+0

有人會幫忙嗎? –

+0

那裏有Spring Security + Hibernate的例子,給它一個搜索。例如:http://www.mkyong.com/spring-security/spring-security-hibernate-annotation-example/ – holmis83

+0

請問您是否發現了針對您的問題的解決方案,您可以發佈代碼嗎? –

回答

3

您可能希望將用戶存儲在數據庫中,而不是在內存中,如果他們註冊:)

  1. 的RESTful應用程序用戶

    List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>(); 
    authorities.add(new SimpleGrantedAuthority("ROLE_USER")); 
    
  2. 實例化的用戶(一個類實現UserDetails

    創建
  3. 將用戶保存在某個有用的地方。 JdbcUserDetailsManager可以將用戶輕鬆保存到數據庫中。

    userDetailsManager.createUser(user); 
    
  4. 創建UsernamePasswordAuthenticationToken

    Authentication authentication = new UsernamePasswordAuthenticationToken(user, null, authorities); 
    
  5. 驗證添加到SecurityContext

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

我在哪裏創建這個用戶和SecurityContext? –

+0

@PhilippJahoda SecurityContext由Spring創建。在獲得用戶的信息(例如他們想要的用戶名和密碼)後,您可能想在註冊邏輯中創建用戶,可能是由控制器使用的服務層 –

+0

感謝您的回覆。我使用spring提供的/ oauth/token URL,是不是正確的?我在哪裏可以訪問提供給此網址的用戶名和密碼? –

0

使用此代碼添加權限當前用戶:

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) 
     ); 
相關問題