2017-06-13 5 views
-2

Ich habe zwei Tabellen "Benutzer" und "Rolle". Ich möchte eine Login-API erstellen (z. B. "/ Login"), die Benutzername und Passwort als JSON-Daten nehmen wird. Ich möchte überprüfen, ob die angegebene Berechtigung eine gültige Berechtigung ist, und wenn dies der Fall ist, möchte ich den Benutzer als authentifizierten Benutzer festlegen, sodass er die geschützten Ressourcen haben kann. Ich bin neu in Spring Boot Framework und ich weiß nicht, wie es geht. Ich habe die offizielle Dokumentation gelesen, kann aber keine Ressourcen finden. Könnte mir jemand dabei helfen?Wie authentifiziere ich den Benutzer manuell im Spring Boot?

+1

Verwenden Sie die rollenbasierte Autorisierung mit Federsicherheit. [this link] (http://www.baeldung.com/role-and-privilege-for-spring-security-registration) kann Ihnen in gewissem Maße helfen – harshavmb

+0

@harshavmb vielen Dank. Ihr Link war sehr hilfreich. –

Antwort

0

Sie haben eine Anzahl von Optionen, um eine solche Authentifizierung in Spring zu implementieren.

Fall 1: - Wenn Sie REST-Service bauen, dann können Sie Sicherheit in folgenden Weise implementieren:

i) - Sie Grund-Authentifizierung verwenden können, um Benutzer zu authentifizieren.

ii) - Sie können mit OAuth2 Ihren Benutzer authentifizieren und autorisieren.

Fall 2: Wenn Sie Web-Anwendung erstellen

i) - Sie Auth-Token (im Falle von SPA Einzelseite Anwendung verwenden können)

ii) - können Sie verwenden Session-basierte Authentifizierung (traditionelles Login-Formular und alle)

Ich denke, Sie sind im Anfänger-Modus, so werde ich Ihnen empfehlen, erstens zu verstehen, die Kontrolle der Benutzer Authentifizierung in der Web-App über Login-Formular . Also lass uns einen Code durchgehen.

Ich gehe davon aus, dass Sie ein grundlegendes Frühlingsprojekt festgelegt haben und jetzt implementieren Sie Sicherheit.

USER - Hibernate-Entity für Ihre Benutzertabelle; ROLLE - Hibernate Einheit für Ihre Rolle Tabelle

@Configuration 
@EnableWebSecurity 
public class WebSecurityConfig extends WebSecurityConfigurerAdapter { 
@Autowired 
private CustomAuthProvider customAuthProvider; 
@Override 
protected void configure(HttpSecurity http) throws Exception { 
    // everyone is allowed tp view login page 
    http.authorizeRequests().antMatchers("/login").permitAll().and(); 
    http.authorizeRequests().antMatchers("custom_base_path" + "**").authenticated().and(). 
    formLogin().loginPage("/loginForm).loginProcessingUrl("/loginUser") 
      .usernameParameter("username").passwordParameter("password") 
      .defaultSuccessUrl("custom_base_path+ "home", true); 

@Autowired 
public void configureGlobalSecurity(AuthenticationManagerBuilder auth) throws Exception { 
    auth.authenticationProvider(customAuthProvider); 
} 


//CustomAuthProvider 
@Component 
public class CustomAuthentiationProvider implements AuthenticationProvider{ 
@Override 
public Authentication authenticate(Authentication authentication) throws AuthenticationException { 
    String userid = authentication.getName(); 
    String password = authentication.getCredentials().toString(); 
    Authentication auth = null; 
    try { 
//write your custom logic to match username, password 
boolean userExists = your_method_that_checks_username_and_password 
     if(userExists){ 
      List<Role> roleList= roleDao.getRoleList(userid); 
      if (roleList == null || roleList.isEmpty()) { 
       throw new NoRoleAssignedException("No roles is assigned to "+userid); 
      } 
      auth = new UsernamePasswordAuthenticationToken(userid, password,getGrantedAuthorities(roleList)); 
     } 
    } catch (Exception e) { 
     log.error("error", e); 
    } 
    return auth; 

} 

@Override 
public boolean supports(Class<?> authentication) { 
    return authentication.equals(UsernamePasswordAuthenticationToken.class); 
} 

public List<GrantedAuthority> getGrantedAuthorities(List<Role> roleList) { 
    List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>(); 
    for (Role role : roleList) { 
     authorities.add(new SimpleGrantedAuthority(role.getRoleName()); 
    } 
    return authorities; 
} 
} 

HINWEIS:Bitte beachten Sie, diese Codes, die Logik der Authentifizierung zu verstehen. nicht als perfekter Code betrachten (nicht für Produktionsumgebung). Sie können mich jederzeit anpingen, ich werde Ihnen mehr dazu vorschlagen.

+0

warum keine up votes? auch nach akzeptierter Antwort –

Verwandte Themen