2016-07-11 5 views
0

Ich bin neu im Frühjahr Sicherheit. Ich muss 3 Arten der Auto-Anpassung erstellen.Fehler 403, als ich versuchte, Seite mit Feder Sicherheit öffnen

by ip 
by sms 
by pin code 

Jetzt habe ich versucht, auth durch IP zu realisieren. Ich benutze Federsicherheit.

Ich bekomme IP-Adresse des Clients (meine Spring-Boot-App) und übergeben an Backend-Server (ein anderer Remote-Java-Server) durch Ruhe. wenn der Benutzer authentifiziert wird, erhalte ich diese Benutzer in meiner Feder app und ich wand ihm zeigen, index.html oder wenn nicht - ich null bekommen, und ich will, dass er

login.html zeigen

Ich schaffe AuthenticationProvider

@Component 
public class IPAddressBasedAuthenticationProvider implements AuthenticationProvider { 
    @Autowired 
    private HttpServletRequest request; 
    @Autowired 
    AuthService authService; 

    @Override 
    public Authentication authenticate(Authentication authentication) throws AuthenticationException { 
     String ipAddress = request.getRemoteAddr(); 
     AuthLkUser authLkUserByIp = authService.getAuthLkUserByIp(ipAddress); 

     if (authLkUserByIp == null) return null; 

     boolean b = authService.checkAuthLkUser(authLkUserByIp); 
     if (b) return null; 
     UsernamePasswordAuthenticationToken result = new UsernamePasswordAuthenticationToken("John Principal", "PlaceholderPWE"); 
     result.setDetails(authentication.getDetails()); 
     result.setAuthenticated(true); 
     return result; 
    } 

    @Override 
    public boolean supports(Class<?> aClass) { 
     return true; 
    } 
} 

Wenn Ich öffne die Seite zum Beispiel index.html und meine Spring-App im Debbug-Modus Ich überprüfe debbug Punkt (Methode ist workged) und ich habe meine authLkUserByIp (Benutzer wird normalerweise authentifiziert). Ich habe result und komme wieder. Aber auf der Seite habe ich Fehler

Whitelabel Error Page 

This application has no explicit mapping for /error, so you are seeing this as a fallback. 

Mon Jul 11 12:48:25 ALMT 2016 
There was an unexpected error (type=Forbidden, status=403). 
Access is denied 

Aber Benutzer normaly authentifiziert. Warum habe ich einen Fehler?

Ich habe versucht, von this example

Aber ich habe nicht web.xml. Alle Konfigurationen im Code. Ich habe einige Fragen: 1. Warum bekomme ich Fehler und wie kann ich es beheben? 2. Wenn ich trid eine andere zwei Arten der Autontifizierung realisieren Wie kann ich es schaffen?

Antwort

0

Ich denke, Sie vermissen die grantedAuths, weil Spring Sicherheit mit Rollen funktioniert.

dies ist ein Beispiel dafür, wie ich handhaben Genehmigung mit einem CustomAuthenticationProvider

@Override 
    public Authentication authenticate(Authentication auth) throws AuthenticationException { 
     String username = String.valueOf(auth.getName()); 
     String password = String.valueOf(auth.getCredentials().toString()); 

     Usuarios us = null; 
     boolean success = false; 
     try { 
      us = user.findByName(username); 
      success = passwordEncoder.matches(password, us.getClave()); 
     } catch (Exception ex) { 
     }  
     if (success == true) { 
      final List<GrantedAuthority> grantedAuths = new ArrayList<>(); 
      String authority; 
      switch (us.getRoles().getNombre()) { 
       case "administrador": 
        authority = "ROLE_ADMIN"; 
        break; 
       case "vendedor": 
        authority = "ROLE_VENDEDOR"; 
        break; 
       default: 
        authority = "ROLE_NONE"; 
        break; 
      } 
      GrantedAuthority grantedAuthority = new SimpleGrantedAuthority(authority); 
      grantedAuths.add(grantedAuthority); 
      final UserDetails principal = new User(username, password, grantedAuths); 
      final Authentication authentication = new UsernamePasswordAuthenticationToken(principal, password, grantedAuths); 
      us = null; 
      return authentication; 
     } else { 
      throw new BadCredentialsException("Bad Credentials"); 
     } 
    } 

Zuerst habe ich die Berechtigung des Benutzers auf meinen Dienst zu überprüfen, finden sie in meiner Datenbank, ich glaube, Sie diese überspringen, und assing direkt Ihre Rolle mit GrantedAuthority.

Dann können Sie Ihre UserDetails erstellen und die Informationen des Benutzers und seiner Rolle mit GrantedAuthority setzen.

Und schließlich bauen Sie Ihre Authentication, um es zurückzugeben. mit allen vorherigen Schritten.

+0

es wird nicht geholfen – user5620472

+0

Erhalten Sie das Token richtig? –