Ich habe die Login-Funktion in meiner Anwendung mit Spring Security verwaltet. Ich mache das mit den zwei Standard-Parametern (Benutzername und Passwort) und es funktioniert richtig. Allerdings muss ich einen zusätzlichen Parameter in der Login-Funktion hinzufügen, aber ich habe Probleme damit.Zusätzliche Parameter in Spring Security Login
In SecurityConfig.java, habe ich den Filter hinzugefügt und es ruft, wenn Senden Schaltfläche gedrückt wird.
public class SecurityConfig erweitert WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/","/index","/login","/work", "/css/**","/out/**", "/js/**","/images/**","/fonts/**").permitAll()
.anyRequest().authenticated()
.and()
.formLogin().loginPage("/login").defaultSuccessUrl("/home")
.permitAll()
.and().logout().permitAll().and()
.csrf().disable();
http.addFilterBefore(new ExUsernamePasswordAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class);
}
Dann meine eigene Filter. Ich erhalte die neuen Parameter (Firma) Wert richtig:
@Override
public Authentication attemptAuthentication(HttpServletRequest request,
HttpServletResponse response) throws AuthenticationException {
String dbValue = request.getParameter("Company");
request.getSession().setAttribute("dbValue", dbValue);
return super.attemptAuthentication(request, response);
}
Ich habe das Problem, wenn super.attemptAuthentication (request, response); heißt, ich bekomme null Zeiger.
Error:
java.lang.NullPointerException org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter.attemptAuthentication(UsernamePasswordAuthenticationFilter.java:93)
es.smt.startrekweb.filter.ExUsernamePasswordAuthenticationFilter.attemptAuthentication(ExUsernamePasswordAuthenticationFilter.java:35)
org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:217)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:120)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:64)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:91)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:53)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:213)
org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:176)
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262)
Dies ist der Code, wo ich in UsernamePasswordAuthenticationFilter.java
return this.getAuthenticationManager().authenticate(authRequest);
auch den Null-Zeiger hat, die ich in meinem Debugger die nächsten Informationen
contextBeforeChainExecution = {[email protected]} "[email protected]ffffff: Null authentication"
authentication = null
niemanden sehen weiß was ich falsch mache ?? Vielen Dank!!
Danke, ich verstehe den Kommentar über den Filter. Aber wenn ich den Filter nicht erweitere, wie bekomme ich die zusätzlichen Informationen? Da Spring Securty nur den Benutzernamen und das Passwort standardmäßig – Zuri
speichert, können Sie den Filter erweitern, aber statt neue ExUsernamePasswordAuthenticationFilter() zu erstellen, erstellen Sie eine Bean und verwenden Sie sie. – Elyran
Danke! Ich habe getan wie du sagst. Ich habe einen Filter als Bean anstelle eines neuen ExUsernamePasswordAuthenticationFilter() hinzugefügt und es funktioniert! – Zuri