设为首页 收藏本站
查看: 561|回复: 0

小猿圈Java开发之如何使用Spring Security手动验证用户方法示例

[复制链接]
累计签到:3 天
连续签到:3 天
发表于 2019-5-30 17:00:42 | 显示全部楼层 |阅读模式
你有没有很迷茫的阶段,感觉自己什么都不行什么都不会,人生没有方向,没有目标,不知道下一步该往哪里走,下面给小猿圈Java讲师给你分享一些如何使用Spring Security手动验证用户方法示例,希望对你有所帮助。



SpringSecurity,简而言之SpringSecurity在ThreadLocal中保存每个经过身份验证的用户的主要信息-保存的是Authentication对象。
为了构造和设置此Authentication对象,通常我们需要使用SpringSecurity在标准身份验证上构建对象的相同方法。
要让我们手动触发身份验证,然后将生成的身份验证对象设置为框架用来保存当前登录用户的当前SecurityContext:
UsernamePasswordAuthenticationToken authReq
= new UsernamePasswordAuthenticationToken(user, pass);
Authentication auth = authManager.authenticate(authReq);
SecurityContext sc = SecurityContextHolder.getContext();
securityContext.setAuthentication(auth);
在上下文中设置身份验证后,我们现在可以使用securityContext.getAuthentication()。isAuthenticated()检查当前用户是否经过身份验证。
SpringMVC,默认情况下SpringSecurity在SpringSecurity过滤器链中添加了一个额外的过滤器。它能够持久化Security上下文(SecurityContextPersistenceFilter类)。
反过来,它将Security上下文的持久性委托给SecurityContextRepository的实例,默认为HttpSessionSecurityContextRepository类。
因此,为了在请求上设置身份验证并因此使其可用于来自客户端的所有后续请求,我们需要在HTTP会话中手动设置包含身份验证的SecurityContext:
public void login(HttpServletRequest req, String user, String pass) {
  UsernamePasswordAuthenticationToken authReq
  = new UsernamePasswordAuthenticationToken(user, pass);
  Authentication auth = authManager.authenticate(authReq);
  SecurityContext sc = SecurityContextHolder.getContext();
  sc.setAuthentication(auth);
  HttpSession session = req.getSession(true);
  session.setAttribute(SPRING_SECURITY_CONTEXT_KEY, sc);
}
SPRING_SECURITY_CONTEXT_KEY是静态导入的HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY。
应该注意的是,我们不能直接使用HttpSessionSecurityContextRepository-因为它与SecurityContextPersistenceFilter一起使用。
这是因为过滤器使用存储库来加载和存储Security上下文在前,在链中执行其余已定义的过滤器在后,但是它在传递给链的响应上使用自定义包装器。。
因此,在这种情况下,您应该知道所使用的包装器的类类型,并将其传递给存储库中的相应save方法。
在这个快速教程中,我们讨论了如何在SpringSecurity上下文中手动设置用户身份验证以及如何使其可用于SpringMVC的目标。专注于代码示例,说明实现它的最简单方法。
以上就是小猿圈给大家分享的如何使用Spring Security手动验证用户方法示例,希望对小伙伴们有所帮助,想要了解更多内容的小伙伴可以登录小猿圈java自学交流群:743849624。还有与时俱进的Java课程体系和Java视频教程供大家学习,想要学好Java开发技术的小伙伴快快行动吧。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-894635-1-1.html 上篇帖子: 小猿圈详解Python中Json与object转化的方法 下篇帖子: 小猿圈Python配置gRPC环境
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表