自定义一个处理登录逻辑并返回经过认证的用户信息,通过重写方法实现向r传入时使用处理认证
public class SmsCodeAuthenticationProvider implements AuthenticationProvider {private UserDetailsService userDetailsService;@Overridepublic Authentication authenticate(Authentication authentication) throws AuthenticationException {SmsCodeAuthenticationToken smsCodeAuthenticationToken = (SmsCodeAuthenticationToken) authentication;UserDetails user = userDetailsService.loadUserByUsername((String)smsCodeAuthenticationToken.getPrincipal());if(user == null){throw new InternalAuthenticationServiceException("用户不存在");}SmsCodeAuthenticationToken authenticationResult = new SmsCodeAuthenticationToken(user,user.getAuthorities());authenticationResult.setDetails(smsCodeAuthenticationToken.getDetails());return authenticationResult;}@Overridepublic boolean supports(Class> aClass) {return SmsCodeAuthenticationToken.class.isAssignableFrom(aClass);}public UserDetailsService getUserDetailsService() {return userDetailsService;}public void setUserDetailsService(UserDetailsService userDetailsService) {this.userDetailsService = userDetailsService;}}
中含有一个是用来查找用户的,在这只是模拟过程没有真实的进行数据库查找
@Componentpublic class MyUserDetailService implements UserDetailsService {@Overridepublic UserDetails loadUserByUsername(String s) throws UsernameNotFoundException {/*** 这里实际情况应该是根据参数s查询数据库用户数据*/return new User(s,"123", AuthorityUtils.commaSeparatedStringToAuthorityList("admin"));}}
把各个组件拼装起来并且把加入到 的过滤器链
@Componentpublic class SmsCodeAuthenticationSecurityConfig extends SecurityConfigurerAdapter
代码中认证是啊比处理器在上文中已经有提到,这里还有一个认证成功处理器,这个认证成功的处理方式就是把认证成功的认证信息在返回中打印出来
@Componentpublic class MyAuthenticationSuccessHandler implements AuthenticationSuccessHandler {private Logger logger = LoggerFactory.getLogger(MyAuthenticationSuccessHandler.class);@Autowiredprivate ObjectMapper objectMapper;@Overridepublic void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {logger.info("登录成功");response.setContentType("application/json;charset=UTF-8");response.getWriter().write(objectMapper.writeValueAsString(authentication));}}
配置和测试
文章插图
配置中把加到之前,把上一步配置加入 。使用自定义登录界面,并且把登录界面和获取验证码的接口都暴漏出来
- cocos ceater 如何实现显示 Tip 的 同时能响应点击其他功能?
- swoole的TCP服务器实现-swoole_server创建过程
- 基于微信小程序的美妆电子商务系统(java+spring+springMvc+s
- 模糊综合评价法用什么软件实现_采用先进算法技术 实现低效资产评估智能化...
- 我的 LaTeX 方案实现
- 手机Linux服务器,安装domoticz实现简单物联网
- 二 自动化测试:安卓机初探与Python实现andriod截图实例
- spring中bean生命周期
- C语言 offsetof的实现
- 基于POI和easyexcel实现excel文件读写-多列表加下拉选项框