2017-12-31 115 views
0

Ich hatte versucht, genau das zu machen, was ein Mitglied hier bereits getan hat Additional parameters in Spring Security Login, aber in meinem Fall kann ich nicht die Formularauthentifizierung verwenden den Filter: (ich bin Frühlings-Boot 1.5.7) mitWie make security formLogin() benutzerdefinierten Filter verwenden

@Override 
    protected void configure(HttpSecurity http) throws Exception {   
     http.csrf().disable().authorizeRequests() 
          .anyRequest().authenticated() 
          .and()        
          .formLogin().loginPage("/login.html") 
             .usernameParameter("username") 
            .passwordParameter("password").permitAll().defaultSuccessUrl("/").failureUrl("/error.html")        
          .and()        
          .logout().logoutUrl("/logout"); 
     http.addFilterBefore(new WebAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class); 
    } 

Pass immer direkt mit der Umsetzung UserDetailsService ohne durch die Filter passieren. Ich hatte auch versucht, eine Bean statt ‚neuen‘ verwenden, aber das Ergebnis ist das gleiche:

http.addFilterBefore(webAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class); 

@Bean 
public WebAuthenticationFilter webAuthenticationFilter() throws Exception { 
    WebAuthenticationFilter auth = new WebAuthenticationFilter(); 
    auth.setRequiresAuthenticationRequestMatcher(new AntPathRequestMatcher("/login", "POST")); 
    auth.setAuthenticationManager(authenticationManagerBean()); 
    return auth; 
} 

Mein benutzerdefinierte Filter ist ein erstreckt sich von UsernamePasswordAuthenticationFilter und in der Überschreibung des Verfahrens attemptAuthentication diese Methode nennt nie:

@Override 
public Authentication attemptAuthentication(HttpServletRequest request, 
     HttpServletResponse response) throws AuthenticationException { 
    tenant = request.getParameter("selectTenant"); 
    System.out.println("We are here WebAuthenticationFilter"); 
    request.getSession().setAttribute(TENANT_KEY, tenant);  
    return super.attemptAuthentication(request, response); 
} 

Antwort

0

die einzige Lösung, die gearbeitet wurde die HttpServletRequest Klasse in meine Implementierung von UserDetailsService Injektion so nehme ich die neuen Parameter f Von der Anfrage hier.

public class myImpleentUserDetailsService implements UserDetailsService (

@Autowired(required = false) 
private HttpServletRequest request; 

public UserDetail loadUserVyUsername(String username) throws UsernameNotFoundException{ 
    String myparameter = request.getParameter("myParameter"); 

    request.setAttribute("app-parameter", myparameter); 

    user = userService.findById(username, myparameter); 

... 
} 
Verwandte Themen