网站首页 > 技术文章 正文
Controller
@RequestMapping("login")
@ResponseBody
public void login(HttpServletRequest request, HttpServletResponse response,String username,String password) throws IOException, ServletException {
UsernamePasswordAuthenticationToken upToken = new UsernamePasswordAuthenticationToken(username, password); // 根据用户名密码生成token
Authentication authentication = authenticationManager.authenticate(upToken); // 验证并生成auth对象
SecurityContextHolder.getContext().setAuthentication(authentication); // 保存auth对象
authenticationSuccessConfig.onAuthenticationSuccess(request, response, authentication); // 执行成功回调
}
loadUserByUsername
通过username构建auth的user对象
@Bean
@Override
public UserDetailsService userDetailsService() {
return username -> {
User user = ...; // 根据username用户名查询数据库获得自身的user对象
return User.withUsername(username).password(user.getPassword()).roles(user.getRole()).build(); // 通过username,password,role生成auth的user对象
};
}
PasswordEncoder
加密方式
@Override
public String encode(CharSequence charSequence) {
return Md5Util.crypt(charSequence.toString());
}
密码验证
@Override
public boolean matches(CharSequence charSequence, String s) {
return s.equals(Md5Util.crypt(charSequence.toString()));
}
onAuthenticationSuccess
登录成功之后执行方法
@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication auth) throws IOException, ServletException {
String username = auth.getName();
// 更新最近登录时间
......
// 生成user对象
Factory.initUserSession();
String redirectUrl = "/index"; //缺省的登录成功页面
SavedRequest savedRequest = (SavedRequest) request.getSession().getAttribute("SPRING_SECURITY_SAVED_REQUEST");
if(savedRequest != null) {
redirectUrl = savedRequest.getRedirectUrl();
request.getSession().removeAttribute("SPRING_SECURITY_SAVED_REQUEST");
}
if(redirectUrl.contains("/login")){
redirectUrl = "/index";
}
response.sendRedirect(redirectUrl);
}
猜你喜欢
- 2024-09-29 基于spring-security图形验证码、token验证
- 2024-09-29 10分钟上手SpringSecurity 框架(3)
- 2024-09-29 SpringBoot 实现自动登录时的安全风险控制
- 2024-09-29 springboot+security框架整合 springboot security详解
- 2024-09-29 时序图说明JWT用户认证及接口鉴权的细节
- 2024-09-29 Spring Security 整合OAuth2 springsecurity整合oauth2+jwt+vue
- 2024-09-29 有关springboot + spring security的思考
- 2024-09-29 SpringSecurity之自定义用户权限信息的存取
- 2024-09-29 你还不了解SpringSecurity吗?快来看看SpringSecurity实战总结
- 2024-09-29 SpringSecurity和JWT实现认证和授权
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)