Ich habe Tabelle mit Benutzern. In dieser Tabelle befindet sich die Spalte "ip_address".Wie kann Benutzer nur durch IP-Adresse im Frühjahr Sicherheit authentifizieren?
Ich habe Server - Java-Server Ich habe Web-App auf Spring-Boot.
Spring Boot kommuniziert mit Java-Server durch Ruhe.
Ich brauche realisieren Benutzer im System von ip autorisieren. Whem Benutzer öffnen Webseite - Spring-Boot-App erhalten RemoteIpAddress (String ipAddress = request.getRemoteAddr();
) und übergeben Sie es an Java-Server in URL. Java-Server überprüfen Sie diese IP in db in der Tabelle Benutzer und wenn Benutzer anmelden können, geben Sie diesen Benutzer Spring Boot App.
Ich möchte dies mit Federsicherheit realisieren. Aber wenn ich die Webseite öffne, öffnet sich im Browser das Dialogfenster zur Eingabe von Login und Passwort. Aber ich brauche kein Login und Passwort. Ich brauche, wenn Benutzer nicht null ist - geben Sie Zugriff auf Seiten und speichern Sie den Benutzer.
und wenn ich Eingabe Login und Passwort ein und drücken Sie „OK“ -Taste ich bewegen, um meine IPAddressBasedAuthenticationProvider
@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;
final List<GrantedAuthority> grantedAuths = new ArrayList<>();
GrantedAuthority grantedAuthority = new SimpleGrantedAuthority("ROLE_ADMIN");
grantedAuths.add(grantedAuthority);
UsernamePasswordAuthenticationToken result = new UsernamePasswordAuthenticationToken(authentication.getName(), authentication.getCredentials(), grantedAuths);
result.setDetails(authentication.getDetails());
return result;
}
@Override
public boolean supports(Class<?> aClass) {
return true;
}
}
Und in dieser Klasse gespeichert Benutzer-Session. Und danach, wenn ich Webseiten öffne, brauche ich keine Eingabe-Login und Passwort. Es enthält in Sitzung. aber meine wep Seite nicht mit Fehlern openned
Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.
Mon Jul 11 14:27:59 ALMT 2016
There was an unexpected error (type=Forbidden, status=403).
Access is denied
keine Konfiguration, keine Stack-Trace. Haben Sie Ihren Code tatsächlich debuggt? Auch imho ist es eine schreckliche Idee, die 'HttpServletRequest' zu injizieren, um die benötigten Informationen zu erhalten. Es ist Teil der 'WebAuthenticatioNDetails' welche auf 'Authentication' gesetzt ist, benutze diese stattdessen. Auch nicht sicher, ob Authentifizierung basierend auf IP-Adresse ist eine gute Idee, was ist mit großen Unternehmen, in der Regel haben sie nur eine einzige externe IP-Adresse aufgrund eines Proxy alle verwenden. –