Sicherheit ist ein wichtiger Aspekt bei der Entwicklung von Webanwendungen. Um Benutzerdaten zu schützen und unbefugten Zugriff zu verhindern, müssen wir einen zuverlässigen Authentifizierungs- und Autorisierungsmechanismus verwenden. Spring Security ist ein leistungsstarkes und weit verbreitetes Sicherheitsframework, das umfassende Lösungen zum Schutz unserer Anwendungen bietet. In diesem Artikel erfahren Sie, wie Sie in Spring Security Benutzerinformationen für authentifizierte und nicht authentifizierte Benutzer erhalten. Der PHP-Editor Baicao zeigt Ihnen, wie Sie die Funktionen von Spring Security nutzen, um Benutzerinformationen abzurufen und Benutzerinformationen zwischen verschiedenen Diensten auszutauschen. Unabhängig davon, ob Sie Anfänger oder erfahrener Entwickler sind, bietet Ihnen dieser Artikel detaillierte Informationen zu Spring Security und hilft Ihnen, die Sicherheit Ihrer Anwendung zu verbessern.
Ich habe einen Frühlingsruhedienst und möchte ihn sowohl für authentifizierte als auch für nicht authentifizierte Benutzer nutzen. Wenn der Benutzer authentifiziert ist, möchte ich die Benutzerinformationen von securitycontextholder.getcontext().getauthentication()
erhalten.
.antmatchers("/app/rest/question/useroperation/list/**").permitall()
In der unten gezeigten ouath2-Konfiguration kann ich dann die Benutzerinformationen abrufen
Authentifizierte Benutzer, nicht authentifizierte Benutzer erhalten jedoch einen 401-Fehler. .antmatchers("/app/rest/question/useroperation/list/**").permitall()
und ignorieren Sie die URL in der Websicherheit
web.ignoring()..antmatchers("/app/rest/question/useroperation/list/**")
In securityconfiguration
wie unten können dann alle Benutzer anrufen
Dienst, aber ich kann die Benutzerinformationen nicht aus dem Sicherheitskontext abrufen. Wie konfiguriere ich meine Spring-Sicherheit so, dass sie die URL für authentifizierte und nicht authentifizierte Benutzer aufruft und die Benutzerinformationen aus dem Sicherheitskontext erhält, wenn sich der Benutzer anmeldet?
@configuration @enableresourceserver protected static class resourceserverconfiguration extends resourceserverconfigureradapter { @inject private http401unauthorizedentrypoint authenticationentrypoint; @inject private ajaxlogoutsuccesshandler ajaxlogoutsuccesshandler; @override public void configure(httpsecurity http) throws exception { http .exceptionhandling() .authenticationentrypoint(authenticationentrypoint) .and() .logout() .logouturl("/app/logout") .logoutsuccesshandler(ajaxlogoutsuccesshandler) .and() .csrf() .requirecsrfprotectionmatcher(new antpathrequestmatcher("/oauth/authorize")) .disable() .headers() .frameoptions().disable() .sessionmanagement() .sessioncreationpolicy(sessioncreationpolicy.stateless) .and() .authorizerequests() .antmatchers("/views/**").permitall() .antmatchers("/app/rest/authenticate").permitall() .antmatchers("/app/rest/register").permitall() .antmatchers("/app/rest/question/useroperation/list/**").permitall() .antmatchers("/app/rest/question/useroperation/comment/**").authenticated() .antmatchers("/app/rest/question/useroperation/answer/**").authenticated() .antmatchers("/app/rest/question/definition/**").hasanyauthority(authoritiesconstants.admin) .antmatchers("/app/rest/logs/**").hasanyauthority(authoritiesconstants.admin) .antmatchers("/app/**").authenticated() .antmatchers("/websocket/tracker").hasauthority(authoritiesconstants.admin) .antmatchers("/websocket/**").permitall() .antmatchers("/metrics/**").hasauthority(authoritiesconstants.admin) .antmatchers("/health/**").hasauthority(authoritiesconstants.admin) .antmatchers("/trace/**").hasauthority(authoritiesconstants.admin) .antmatchers("/dump/**").hasauthority(authoritiesconstants.admin) .antmatchers("/shutdown/**").hasauthority(authoritiesconstants.admin) .antmatchers("/beans/**").hasauthority(authoritiesconstants.admin) .antmatchers("/info/**").hasauthority(authoritiesconstants.admin) .antmatchers("/autoconfig/**").hasauthority(authoritiesconstants.admin) .antmatchers("/env/**").hasauthority(authoritiesconstants.admin) .antmatchers("/trace/**").hasauthority(authoritiesconstants.admin) .antmatchers("/api-docs/**").hasauthority(authoritiesconstants.admin) .antmatchers("/protected/**").authenticated(); } }
Sicherheitskonfiguration
@Configuration @EnableWebSecurity public class SecurityConfiguration extends WebSecurityConfigurerAdapter { @Inject private UserDetailsService userDetailsService; @Bean public PasswordEncoder passwordEncoder() { return new StandardPasswordEncoder(); } @Inject public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { auth .userDetailsService(userDetailsService) .passwordEncoder(passwordEncoder()); } @Override public void configure(WebSecurity web) throws Exception { web.ignoring() .antMatchers("/bower_components/**") .antMatchers("/fonts/**") .antMatchers("/images/**") .antMatchers("/scripts/**") .antMatchers("/styles/**") .antMatchers("/views/**") .antMatchers("/i18n/**") .antMatchers("/swagger-ui/**") .antMatchers("/app/rest/register") .antMatchers("/app/rest/activate") .antMatchers("/app/rest/question/useroperation/list/**") .antMatchers("/console/**"); } @EnableGlobalMethodSecurity(prePostEnabled = true, jsr250Enabled = true) private static class GlobalSecurityConfiguration extends GlobalMethodSecurityConfiguration { @Override protected MethodSecurityExpressionHandler createExpressionHandler() { return new OAuth2MethodSecurityExpressionHandler(); } } }
permitall()
仍然需要 authentication
对象出现在 securitycontext
in.
Für nicht-authentifizierte Benutzer kann dies erreicht werden, indem der anonyme Zugriff aktiviert wird:
@override public void configure(httpsecurity http) throws exception { http //some configuration .and() .anonymous() //allow anonymous access .and() .authorizerequests() .antmatchers("/views/**").permitall() //other security settings
Anonymer Zugriff fügt zusätzlichen Filter hinzu: anonymousauthenticationfilter
到填充anonymousauthenticationtoken
作为身份验证信息的过滤器链,以防securitycontext
中没有authentication
Objekt
Ich habe diese Sicherheitskonfiguration zur Überprüfung des Autors über /public/authphpcnendcphp Chinesisch:
@Override protected void configure(HttpSecurity http) throws Exception { http.cors().and().authorizeRequests() .antMatchers("/api/skills/**", "/api/profile/**", "/api/info/**").authenticated() .antMatchers("/api/**").hasAuthority(Role.ROLE_ADMIN.getAuthority()) .antMatchers("/public/auth").permitAll() .and().httpBasic() .and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) .and().csrf().disable(); } @GetMapping(value = "/public/auth") private ResponseEntity<User> getAuthUser(@AuthenticationPrincipal AuthUser authUser) { return authUser == null ? ResponseEntity.notFound().build() : ResponseEntity.ok(authUser.getUser()); }
Das obige ist der detaillierte Inhalt vonSpring Security ruft Benutzerinformationen für authentifizierte und nicht authentifizierte Benutzer in den verbleibenden Diensten ab. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!