2017-09-08 11 views
0

私は働いていますスプリングブート、スプリングセキュリティ基本認証。 AngularJSで書かれたクライアントアプリケーションから、RESTfulなAPI呼び出しを介してログインURLを送信します。新規に登録したユーザーをSpringブートセキュリティ設定に追加するにはどうすればよいですか?

すべてが期待通りに機能します。 DB内のすべてのユーザーは、SecurityConfiguration.javaに以下のように構成されています。

@Autowired 
public void configureGlobalSecurity(AuthenticationManagerBuilder auth) throws Exception { 

    List<User> users = userService.getUsers(); 
    for (User user : users) { 
     auth.inMemoryAuthentication().withUser(user.getUserName()).password(user.getPassword()) 
       .roles(user.getRole().getName()); 
    } 
} 

@Override 
protected void configure(HttpSecurity http) throws Exception { 

    http.csrf().disable().authorizeRequests().antMatchers("/server/rest/secure/**") 
    .hasRole("ADMIN").and() 
      .httpBasic().realmName(REALM).authenticationEntryPoint(getBasicAuthEntryPoint()); 
} 

@Bean 
public CustomBasicAuthenticationEntryPoint getBasicAuthEntryPoint() { 
    return new CustomBasicAuthenticationEntryPoint(); 
} 

CustomBasicAuthenticationEntryPoint.java

import java.io.IOException; 
import java.io.PrintWriter; 

import javax.servlet.ServletException; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import org.springframework.security.core.AuthenticationException; 
import org.springframework.security.web.authentication.www.BasicAuthenticationEntryPoint; 

public class CustomBasicAuthenticationEntryPoint extends BasicAuthenticationEntryPoint { 

@Override 
public void commence(final HttpServletRequest request, 
     final HttpServletResponse response, 
     final AuthenticationException authException) throws IOException, ServletException { 

    response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); 
    response.addHeader("WWW-Authenticate", "Basic realm=" + getRealmName() + ""); 

    PrintWriter writer = response.getWriter(); 
    writer.println("HTTP Status 401 : " + authException.getMessage()); 
    response.setHeader("WWW-Authenticate", "FormBased"); 
    response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Unauthorized"); 
} 

@Override 
public void afterPropertiesSet() throws Exception { 
    setRealmName("MY_TEST_REALM"); 
    super.afterPropertiesSet(); 
} 
} 

だから私はDBに挿入が、上記の実装で追加されません新しいユーザーをサインアップする場合。したがって、認証は失敗します。

@Service("userDetailsService") 
@Transactional 
public class MUserDetailService implements UserDetailsService { 

    @Autowired 
    AppUserDao appUserDao; 

    @Override 
    public UserDetails loadUserByUsername(final String appUserName) throws UsernameNotFoundException { 

     AppUser appUser = appUserDao.findByName(appUserName); 
     if (appUser == null) throw new UsernameNotFoundException(appUserName); 
     else{ 
      return new User(appUser.getUsername(),appUser.getPassword(),appUser.getActive(),true,true,true,getGrantedAuthorities(appUser)); 
     } 
    } 

    private List<GrantedAuthority> getGrantedAuthorities(AppUser appUser){ 
     List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>(); 

     for (Authority authority : appUser.getAuthorities()){ 
      authorities.add(new SimpleGrantedAuthority(authority.getAuthorityName())); 
     } 
     return authorities; 
    } 
} 

、その後、次のようにSecurityConfigurationを定義します。私はいつでも上記の実装を更新して、新しいユーザーDBで認証を行う場合、あなたは次のことを行う必要があります

答えて

1

のサインアップを行うことができますどのように

@Configuration 
@EnableWebSecurity 
public class SecurityConfiguration extends WebSecurityConfigurerAdapter{ 

    @Autowired 
    @Qualifier("userDetailsService") 
    UserDetailsService userDetailsService; 


    @Autowired 
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { 
     auth.userDetailsService(userDetailsService); 
    } 
} 
+0

この参考リンクはありますか? – Prince

+0

参照リンクはどういう意味ですか? – ArslanAnjum

+0

私はこれに関するウェブサイトの参照を意味します。必要に応じて私のコードを更新するのに役立ちます – Prince

関連する問題