Security的入门和流程分析

Security的入门和流程分析

问题:访问一个controller方法之前进行一个权限验证?

在controller里面的每一个handler无论什么访问都要进行一个校验,但是对于login logout 验证码这种Handler处理器是放行的

1.使用过滤器+拦截器 注意两者区别

过滤器(Filter)和拦截器(Interceptor)都是用于处理请求和响应的组件,它们的区别主要在于它们作用的层次和执行时机。

  1. 过滤器(Filter):

    • 作用层次:在Servlet规范中,过滤器是在Web服务器和Web应用程序之间的层次上工作的,主要用于处理HTTP请求和响应。
    • 执行时机:在请求的进入和响应的离开阶段都可以执行过滤操作。
  2. 拦截器(Interceptor):

    • 作用层次:拦截器通常在应用程序框架层次上工作,例如在Spring框架中。它们用于拦截和处理方法调用、请求处理等。
    • 执行时机:在方法调用前后、请求处理前后等关键点上执行,更加细粒度地控制请求的处理过程。

创建一个过滤器类,实现 javax.servlet.Filter 接口。在 doFilter 方法中添加权限验证的逻辑。

public class MyFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
   // 过滤器权限验证逻辑
   // 如果是登录、登出、验证码等处理器,放行
   // 否则进行权限验证
   chain.doFilter(request, response); // 继续请求链
}
​
// 其他 Filter 接口方法,如 init 和 destroy,可以留空
}
​SpringMvc流程:(本质用来处理用户的请求并进行·处理)

加一个校验  (假设执行所有方法之前)

拦截器在方法执行之前执行

过滤器只要访问了我的web容器就执行

Spring MVC的简要流程如下:

  1. 请求到达DispatcherServlet: 所有的请求首先由前端控制器 DispatcherServlet 接收。

  2. Handler Mapping: DispatcherServlet 通过 HandlerMapping 查找请求对应的处理器(Controller)。        IOC/AOP ->Spring

  3. Handler Execution: 找到合适的处理器后,执行相应的方法。

  4. ModelAndView: 处理器返回一个 ModelAndView 对象,其中包含模型数据和视图名称。

  5. View Resolver: DispatcherServlet 通过 ViewResolver 解析视图名称,获取视图对象。

  6. View Rendering: 视图对象负责渲染模型数据,生成最终的响应结果。

  7. 返回响应: DispatcherServlet 将最终的响应发送给客户端。

2. 创建拦截器

创建一个拦截器类,实现 Spring 的 HandlerInterceptor 接口。在 preHandle 方法中添加权限验证的逻辑。

public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
   // 拦截器权限验证逻辑
   // 如果是登录、登出、验证码等处理器,放行
   // 否则进行权限验证,返回 true 表示继续执行,返回 false 表示拦截请求
   return true;
}
​
// 其他 HandlerInterceptor 接口方法,可以留空
}
​

3. 配置过滤器和拦截器

在你的应用程序配置中,配置过滤器和拦截器,并指定它们的拦截/过滤路径以及放行路径

@Configuration
public class AppConfig implements WebMvcConfigurer {
@Autowired
private MyInterceptor myInterceptor;
​
@Bean
public FilterRegistrationBean<MyFilter> myFilter() {
   FilterRegistrationBean<MyFilter> registrationBean = new FilterRegistrationBean<>();
   registrationBean.setFilter(new MyFilter());
   registrationBean.addUrlPatterns("/secure/*"); // 设置过滤路径
   return registrationBean;
}
​
@Override
public void addInterceptors(InterceptorRegistry registry) {
   registry.addInterceptor(myInterceptor)
           .addPathPatterns("/secure/**") // 设置拦截路径
           .excludePathPatterns("/login", "/logout", "/captchaImage"); // 设置放行路径
}
}

方法一:过滤器做放行(/login)  拦截器做校验判断

方法二:   使用springsecurity(优化之前的方式)  -> 专门用于处理认证和授权

第一步配置:

?No Ideal 

这个Spring整合SpringSecurity的案例解释一下

这两个方法的的调用还是不理解 为啥我就不用手动调用了

1.系统启动的时候Springsecurity做了什么事情?
在Spring的初始化中完成了对SpringSecurity的配置文件的加载解析操作。

Springboot的执行流程:

1.new一个SpringApplication  2.RUN  分两部分

过滤器:看过滤方法就行 init()  doFilter()  destory()

:IOC容器

SpringSecurity必须依赖Spring

有请求:开始过滤dofilter()   最终去web容器找过滤器

DelegatingFilterproxy在初始化的时候,从容器中根据名称和类型从IOC容器中取到了FiterChainProxy对象,该对象肯定是在SpringSecurity的初始化操作时创建的

SpringSecurity在初始化的时候->根据我们这个配置代理过滤器名称  从IOC容器中拿到DelegatingFilterproxy对象

走完init->走doFilter

NO ideal??

代理过滤器 从IOC容器里面获取FilterChainProxy->在过滤器里面帮你初始化一组过滤器链然后真正处理请求走过滤器链 认证走拦截器

demo

/

整个流程:

必须加密   ->把东西加到IOC容器当中这是需要的

Bad credentials

test1

1234

No Ideal??

LoginUrlAuthenticationEntryPoint的commence方法:方法的执行时机???

登录controller:

登录实现类Impl:

写完一个功能 merge到主线

从controller --> 到...ByLoadNameAndPassword()方法

@Componnets不可以搞源码哦

注入问题:

read-only不能加@Bean标签

方法二:

注入成功之后:

传Authentication接口的子类的实现类

登出实现类Impl:

认证流程

用户详情实现类:

账号密码 --> 存入ThreadLocal中

获取user对象(通过工具类)

String username = AuthenticationContextHolder.getContext().getName();//拿到用户名

String password= AuthenticationContextHolder.getContext().getPassword();//拿到密码

JsonIgnore:序列化操作忽略Security的入门和流程分析

swagger:接口规范的api有关 -> controller中的RquestMapping("url")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/294327.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2023中国PostgreSQL数据库生态大会-核心PPT资料下载

一、峰会简介 大会以“极速进化融合新生”为主题&#xff0c;探讨了PostgreSQL数据库生态的发展趋势和未来方向。 在大会主论坛上&#xff0c;专家们就PostgreSQL数据库的技术创新、应用实践和生态发展进行了深入交流。同时&#xff0c;大会还设置了技术创新&云原生论坛、…

计算机创新协会冬令营——暴力枚举题目05

这道题挺基础但是挺多坑的。(•́へ•́╬) 题目 204. 计数质数 - 力扣&#xff08;LeetCode&#xff09; 给定整数 n &#xff0c;返回 所有小于非负整数 n 的质数的数量 。 示例 示例 1&#xff1a; 输入&#xff1a;n 10 输出&#xff1a;4 解释&#xff1a;小于 10 的质…

手机与电脑投屏互联方案

手机 to 电脑 无线显示器 搜索"无线显示器"找到系统自带的应用 没有的话, 可能需要安装一下 电脑上打开无线显示器 手机中打开投屏 就投上去了, 感觉很卡, 不是很流畅,但是是系统自带的功能, 比较方便 无法连接时可以检查一下这里的设置 scrcpy screen copy 屏幕…

Socket与TCP的关系

前言 相信大家对于TCP已经非常熟悉了&#xff0c;学习过计算机网络的同学对于它的连接和断开流程应该已经烂熟于心了吧。 那么Socket是什么&#xff1f; Socket是应用层与TCP/IP协议簇通信的中间软件抽象层&#xff0c;它是一组接口。在设计模式中&#xff0c;Socket其实就是…

2023 北京国炬软件年度总结—JeecgBoot与敲敲云

2023年对于北京国炬软件公司来说是一个充满成就和创新的一年。 我们成功推出了APass零代码平台—敲敲云&#xff0c;一款能够在5分钟内搭建应用的新一代零代码平台。自2023年1月1号正式上线以来&#xff0c;敲敲云已经突破了10万注册用户&#xff0c;并与数百家战略合作伙伴达…

解决mock单元测试中 无法获取实体类xxx对应的表名

错误描述&#xff1a;在执行单元测试时&#xff0c;执行到new Example时抛出异常&#xff0c;提示无法获取实体类xxx对应的表名 Example example new Example(ServeSubscribeRecord.class);Example.Criteria criteria example.createCriteria();criteria.andEqualTo("se…

记一次:Python的学习笔记四(Gatway网关配置python服务)

前言&#xff1a;如果我后台是spring cloud&#xff0c;单独一个模块是Python写的服务如何集成进来呢&#xff1f;于是乎如下 1、gatway网关配置 # python服务- id: xxx-pythonuri: lb://xxx-pythonpredicates:- Path/python/**filters:- StripPrefix1 2、请求网关地址&#…

如何在 Ubuntu 20.04 上安装和使用 Docker

前些天发现了一个人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;最重要的屌图甚多&#xff0c;忍不住分享一下给大家。点击跳转到网站。 如何在 Ubuntu 20.04 上安装和使用 Docker 介绍 Docker是一个可以简化容器中应用程序进程管理过程的应用程序。…

网络割接为什么经常是半夜进行?

你们好&#xff0c;我的网工朋友。 假设你最近遇到了一个客户&#xff0c;客户有个新的园区刚刚建成&#xff0c;园区内包括建筑物若干&#xff0c;地理覆盖面也较广&#xff0c;园区建成后&#xff0c;肯定是需要一个专用网络的&#xff0c;用于承载公司的业务流量。 这时候&…

芯课堂 | LVGL基础知识(三)

概述 LVGL进度条对象上有一个背景和一个指示器。指示器的宽度根据进度条的当前值进行设置。 如果对象的宽度小于其高度&#xff0c;则可以创建垂直进度条。 不仅可以设置进度条的结束值&#xff0c;还可以设置进度条的起始值&#xff0c;从而改变指示器的起始位置。 LVGL进度…

【ESP32接入语言大模型之通义千问】

1. 通义千问 讲解视频&#xff1a; ESP32接入语言大模型之通义千问 随着人工智能技术的不断发展&#xff0c;自然语言处理领域也得到了广泛的关注和应用。通义千问由阿里云开发&#xff0c;目标是帮助用户获得准确、有用的信息&#xff0c;解决他们的问题和困惑&#xff0c;也…

C# OpenCvSharp DNN FreeYOLO 目标检测

目录 效果 模型信息 项目 代码 下载 C# OpenCvSharp DNN FreeYOLO 目标检测 效果 模型信息 Inputs ------------------------- name&#xff1a;input tensor&#xff1a;Float[1, 3, 192, 320] --------------------------------------------------------------- Outp…

C# OpenCvSharp DNN Gaze Estimation

目录 介绍 效果 模型信息 项目 代码 frmMain.cs GazeEstimation.cs 下载 C# OpenCvSharp DNN Gaze Estimation 介绍 训练源码地址&#xff1a;https://github.com/deepinsight/insightface/tree/master/reconstruction/gaze 效果 模型信息 Inputs ----------------…

书生·浦语大模型实战营第一次课堂笔记

书生浦语大模型全链路开源体系。大模型是发展通用人工智能的重要途径,是人工通用人工智能的一个重要途径。书生浦语大模型覆盖轻量级、重量级、重量级的三种不同大小模型,可用于智能客服、个人助手等领域。还介绍了书生浦语大模型的性能在多个数据集上全面超过了相似量级或相近…

PMP证书考下来要多少费用?

PMP考试形式分为&#xff1a;笔试、机考。PMP考试这里只着重介绍笔试&#xff08;大陆地区目前都是笔试&#xff09;&#xff1a; PMP认证考试在大陆内的考试一般一年举行四次&#xff0c;分别在3、6、9、12月份。2024年考试时间是3、5、8、11月份。 考试方式是笔试。考试改版…

stable diffusion 人物高级提示词(四)朝向、画面范围、远近、焦距、机位、拍摄角度

一、朝向 英文中文front view正面Profile view / from side侧面half-front view半正面Back view背面(quarter front view:1.5)四分之一正面 prompt/英文中文翻译looking at the camera看向镜头facing the camera面对镜头turned towards the camera转向镜头looking away from …

制造业企业使用SD-WAN的意义

在信息技术和制造业越来越密不可分的背景下&#xff0c;推进智能制造&#xff0c;需要升级网络支撑工业互联网平台的搭建、数字化车间、智能工厂的建设等等。SD-WAN的应用使得制造业企业网络升级更为方便、快捷、低成本。 制造业企业总部、分支机构、工厂一般分布较为分散&…

大数据开发个人简历范本(2024最新版-附模板)

大数据开发工程师个人简历范本> 男 22 本科 张三 计算机科学与技术 1234567890 个人概述 具备深入的Hadoop大数据运维工程师背景&#xff0c;熟悉相关技术和工具 具备良好的团队合作能力&#xff0c;善于沟通和协作 具有快速学习新知识和解决问题的能力 对于数据科学…

Kafka 如何保证消息不丢失?

今天分享的这道面试题&#xff0c;是一个工作 2 年的小伙伴私信给我的。 我觉得这个问题比较简单&#xff0c;本来不打算说&#xff0c;但是&#xff0c;唉~ 作为新的 UP 主满足粉丝的基本要求&#xff0c;才能获得更多的点赞呀~是吧。 关于“ Kafka 如何保证消息不丢失 ”这…

最新自动化测试面试题总结(答案+文档)

1、你做了几年的测试、自动化测试&#xff0c;说一下 selenium 的原理是什么&#xff1f; 我做了五年的测试&#xff0c;1年的自动化测试&#xff1b; selenium 它是用 http 协议来连接 webdriver &#xff0c;客户端可以使用 Java 或者 Python 各种编程语言来实现&#xff1…