我想为Spring Boot中的身份验证添加一些逻辑,检查帐户是否具有特定的逻辑,例如,如果帐户中的某个日期在当前日期之前。哪里更好地把我的自定义验证逻辑?
哪里最好放在自定义过滤器或UserDetailsService中?
如果它在过滤器中,最好是从任何春季级别延伸?
说明
正如你可以看到波纹管我用一个自定义的UserDetailsService()来获得用户的详细信息(CuentaUser
),其中有所需的逻辑域(例如到期日期)。所以现在我需要添加逻辑,并在我可以放置的两个地方找到它:在UserDetailsServices(如果逻辑失败时抛出异常)或作为自定义过滤器。
哪里更好地把我的自定义身份验证逻辑?
这是我的实际安全配置:
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进行检查。