如何使用Spring Security手动验证用户的方法示例

 更新时间:2019年05月24日 10:01:59   作者:程序猿Knight  
这篇文章主要介绍了如何使用Spring Security手动验证用户的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

1.概述

在这篇快速文章中,我们将 重点介绍如何以编程方式在Spring Security和Spring MVC中设置经过身份验证的用户 。

2. Spring Security

简而言之, Spring Security在ThreadLocal中保存每个经过身份验证的用户的主要信息 - 保存的是Authentication对象 。

为了构造和设置此Authentication对象, 通常我们需要使用Spring Security在标准身份验证上构建对象的相 同方法。

要让我们手动触发身份验证, 然后将生成的身份验证对象设置为框架用来保存当前登录用户的当前SecurityContext :

UsernamePasswordAuthenticationToken authReq
 = new UsernamePasswordAuthenticationToken(user, pass);
Authentication auth = authManager.authenticate(authReq);
SecurityContext sc = SecurityContextHolder.getContext();
securityContext.setAuthentication(auth);

在上下文中设置身 份验证后,我们现在可以使用securityContext.getAuthentication()。isAuthenticated()检查当前用户是否经过身份验证 。

3. Spring MVC

默认情况下,Spring Security 在Spring Security过滤器链中添加了一个额外的过滤器。它能够持久化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方法。

4.总结

在这个快速教程中,我们讨论了如何在Spring Security上下文中手动设置用户身份验证以及如何使其可用于Spring MVC的目标。专注于代码示例,说明实现它的最简单 方法。

与往常一样,可以 在GitHub上找到代码 示例。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Java异常处理的五个关键字

    Java异常处理的五个关键字

    本篇文章给大家详细讲述了关于Java异常处理的相关知识点,并列举了5个重要关键字,一起啊参考学下。
    2018-03-03
  • java构造http请求的几种方式(附源码)

    java构造http请求的几种方式(附源码)

    本文主要介绍了java构造http请求的几种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • 关于Nacos配置管理的统一配置管理、自动刷新详解

    关于Nacos配置管理的统一配置管理、自动刷新详解

    这篇文章主要介绍了关于Nacos配置管理的统一配置管理、自动刷新详解,Nacos是阿里的一个开源产品,是针对微服务架构中的服务发现、配置管理、服务治理的综合型解决方案,需要的朋友可以参考下
    2023-05-05
  • eclipse maven 插件的安装和配置详解

    eclipse maven 插件的安装和配置详解

    这篇文章主要介绍了eclipse maven 插件的安装和配置详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • java中关于移位运算符的demo与总结(推荐)

    java中关于移位运算符的demo与总结(推荐)

    下面小编就为大家带来一篇java中关于移位运算符的demo与总结(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-05-05
  • Java8 CompletableFuture 异步执行操作

    Java8 CompletableFuture 异步执行操作

    CompletableFuture是java8提供的基于异步操作的封装,日常开发中经常会用到,接下来通过本文给大家介绍Java8 CompletableFuture 异步执行操作,感兴趣的朋友一起看看吧
    2021-06-06
  • java arrayList遍历的四种方法及Java中ArrayList类的用法

    java arrayList遍历的四种方法及Java中ArrayList类的用法

    arraylist是动态数组,它具有三个好处分别是:动态的增加和减少元素 、实现了ICollection和IList接口、灵活的设置数组的大小,本文给大家介绍java arraylist遍历及Java arraylist 用法,感兴趣的朋友一起学习吧
    2015-11-11
  • 解决feign微服务间的文件上传报错问题

    解决feign微服务间的文件上传报错问题

    这篇文章主要介绍了解决feign微服务间的文件上传报错问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • spring boot只需两步优雅整合activiti示例解析

    spring boot只需两步优雅整合activiti示例解析

    这篇文章主要主要来教大家spring boot优雅整合activiti只需两步就可完成测操作示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助祝大家多多进步
    2022-03-03
  • 利用java反射机制实现自动调用类的简单方法

    利用java反射机制实现自动调用类的简单方法

    下面小编就为大家带来一篇利用java反射机制实现自动调用类的简单方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-08-08

最新评论