0

Ich arbeite Spring-Boot, Spring Sicherheit mit grundlegende Authentifizierung. Ich werde die Login-URL von meiner in AngularJS geschriebenen Client-Anwendung per REST-API-Aufruf senden.Wie kann ich neu angemeldeten Benutzer in der Spring Boot Security Config hinzufügen?

Alles funktioniert wie erwartet. Alle Benutzer in der DB konfiguriert in der SecurityConfiguration.java wie unten.

@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(); 
} 
} 

Also, wenn ich einen neuen Benutzer registrieren, die in der DB eingesetzt werden, aber nicht in der obigen Umsetzung hinzugefügt. Die Authentifizierung schlägt fehl.

Wie kann die obige Implementierung aktualisieren, wann immer ich bin und tun die Registrierung eines neuen Benutzers

Antwort

1

Wenn die Authentifizierung mit db tun, sollten Sie Folgendes tun:

@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; 
    } 
} 

und dann SecurityConfiguration wie folgt definieren :

@Configuration 
@EnableWebSecurity 
public class SecurityConfiguration extends WebSecurityConfigurerAdapter{ 

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


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

Können Sie den Referenzlink dafür geben? – Prince

+0

was meinst du mit Referenzlink? – ArslanAnjum

+0

Ich meine jede Website-Referenz dafür. Es wird mir helfen, meinen Code bei Bedarf zu aktualisieren – Prince

Verwandte Themen