2016-06-07 61 views
0

我想为Spring Boot中的身份验证添加一些逻辑,检查帐户是否具有特定的逻辑,例如,如果帐户中的某个日期在当前日期之前。哪里更好地把我的自定义验证逻辑?

哪里最好放在自定义过滤器或UserDetailsS​​ervice中?

如果它在过滤器中,最好是从任何春季级别延伸?


说明

正如你可以看到波纹管我用一个自定义的UserDetailsS​​ervice()来获得用户的详细信息(CuentaUser),其中有所需的逻辑域(例如到期日期)。所以现在我需要添加逻辑,并在我可以放置的两个地方找到它:在UserDetailsS​​ervices(如果逻辑失败时抛出异常)或作为自定义过滤器。

哪里更好地把我的自定义身份验证逻辑?

这是我的实际安全配置:

public class SecurityConfig extends WebSecurityConfigurerAdapter { 

    @Autowired 
    private CuentaRepository accountRepository; 

    @Autowired 
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { 

     auth.userDetailsService(userDetailsService()); 

    } 

    @Bean 
    public UserDetailsService userDetailsService() { 
     return (username) -> accountRepository.findByUsuario(username) 
       .map(a -> new CuentaUser(a, AuthorityUtils.createAuthorityList("USER", "write"))) 
       .orElseThrow(() -> new UsernameNotFoundException("could not find the user '" + username + "'")); 
    } 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 

     CsrfTokenResponseHeaderBindingFilter csrfTokenFilter = new CsrfTokenResponseHeaderBindingFilter(); 
     http.addFilterAfter(csrfTokenFilter, CsrfFilter.class); 

     http.authorizeRequests().anyRequest().authenticated().and().httpBasic(); 

    } 

} 

编辑:我发现,对于到期日期的例子,是UserDetails有它的属性,因此是更好地使用它。无论如何,如果您不使用默认值,您需要使用自定义AuthenticationProvider进行检查。

回答