通过【从授权开始看源码】我们可以看到这里主要就是干了几件事情
AbstractAuthenticationToken 比如 UsernamePasswordAuthenticationTokenAbstractAuthenticationToken 确定AuthenticationProviderAuthenticationProvider 最后调用 authenticate()方法最后进行授权我们把上面的流程再进行一次简化:
授权
ClientCredentialsTokenEndpointFilter.doFilter()
--> AbstractAuthenticationProcessingFilter.attemptAuthentication()
根据上面我们对自己对代码进行了一些封装
我们先来看LoginAuthenticationFilter
ClientCredentialsTokenEndpointFilter.doFilter()
--> AbstractAuthenticationProcessingFilter.attemptAuthentication()
--> YamiAuthenticationProcessingFilter.attemptAuthentication()
--> LoginAuthenticationFilter.getUserDetails()
我们看几段比较重要的代码
public class LoginAuthenticationFilter extends YamiAuthenticationProcessingFilter {
public LoginAuthenticationFilter(xxxx xxx){
// 确定当url为/login时会被该Filter进行拦截
super("/login");
}
// 这里写自定义登录的方法
protected UserDetails getUserDetails(AuthenticationToken authentication) {
// 使用手机号或账号登陆
yamiUserDetailsService.loadUserByMobileOrUserName(userNameOrMobile, authentication.getAppType(),authentication.getLoginType());
return user;
}
}
通过上面的LoginAuthenticationFilter 即可实现简单的账号密码登录了