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")

  • 22
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Security是一个功能强大的身份验证和授权框架,用于保护Java应用程序的安全性。它提供了一套全面的认证和授权机制,可以轻松地集成到Spring应用程序中。 Spring Security的认证和授权流程如下: 1. 用户提交登录请求:用户在前端页面输入用户名和密码,并提交登录请求。 2. 认证过滤器链:Spring Security通过一系列的过滤器链来处理认证请求。其中最重要的是UsernamePasswordAuthenticationFilter,它负责处理用户名和密码的认证。 3. 用户认证:UsernamePasswordAuthenticationFilter将用户名和密码传递给AuthenticationManager进行认证。AuthenticationManager是Spring Security的核心接口,负责处理认证请求。 4. 用户提供的凭据验证:AuthenticationManager使用用户提供的凭据(用户名和密码)与存储在系统中的凭据进行比较。通常情况下,凭据是存储在数据库中的加密密码。 5. 认证结果生成:如果凭据验证成功,AuthenticationManager将生成一个认证成功的Authentication对象,并将其返回。 6. 认证成功处理器:认证成功后,Spring Security会调用认证成功处理器(AuthenticationSuccessHandler),执行一些自定义的逻辑,例如生成并返回一个JWT令牌。 7. 生成令牌:如果需要生成令牌,可以使用TokenProvider来生成一个JWT令牌,并将其返回给客户端。 8. 授权过滤器链:一旦用户成功认证并获得令牌,后续的请求将被授权过滤器链处理。授权过滤器链会验证请求中的令牌,并根据令牌中的信息判断用户是否有权限访问资源。 9. 授权验证:授权过滤器链会验证令牌的有效性,并根据令牌中的角色和权限信息判断用户是否有权限访问请求的资源。 10. 授权结果处理:如果用户有权限访问资源,授权过滤器链会继续处理请求。否则,将返回一个未授权的错误响应。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值