通过【从授权开始看源码】我们可以看到这里主要就是干了几件事情 - 通过filter 确定登录要过滤的url - 通过filter 确定生成的`AbstractAuthenticationToken` 比如 `UsernamePasswordAuthenticationToken` - 通过生成的`AbstractAuthenticationToken` 确定`AuthenticationProvider` - 通过`AuthenticationProvider` 最后调用 `authenticate()`方法最后进行授权 我们把上面的流程再进行一次简化: - 通过filter确定登录请求的url - 授权 ``` ClientCredentialsTokenEndpointFilter.doFilter() --> AbstractAuthenticationProcessingFilter.attemptAuthentication() ``` 根据上面我们对自己对代码进行了一些封装 我们先来看`LoginAuthenticationFilter` ``` ClientCredentialsTokenEndpointFilter.doFilter() --> AbstractAuthenticationProcessingFilter.attemptAuthentication() --> YamiAuthenticationProcessingFilter.attemptAuthentication() --> LoginAuthenticationFilter.getUserDetails() ``` 我们看几段比较重要的代码 ```java 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` 即可实现简单的账号密码登录了