当前位置: 首页 > wzjs >正文

厦门网站建设公司排名武汉网站推广很 棒

厦门网站建设公司排名,武汉网站推广很 棒,低价建设手机网站,潜江资讯网全部spring security 使用的过滤器还是拦截器 Spring Security 是一个强大的安全框架,用于保护 Java 应用程序。它主要使用过滤器(Filters)来实现安全功能,而不是拦截器(Interceptors)。不过,它也提…

spring security 使用的过滤器还是拦截器

Spring Security 是一个强大的安全框架,用于保护 Java 应用程序。它主要使用过滤器(Filters)来实现安全功能,而不是拦截器(Interceptors)。不过,它也提供了一些拦截器扩展功能,可以在某些场景下与 Spring MVC 拦截器配合使用。

Spring Security 的过滤器

Spring Security 主要通过一系列的过滤器来处理安全性。这些过滤器被组织成一个过滤器链,这个链会在每个 HTTP 请求到达实际处理代码之前进行处理。常见的过滤器有:

  • SecurityContextPersistenceFilter:管理 SecurityContext 的生命周期。
  • UsernamePasswordAuthenticationFilter:处理基于表单的登录。
  • BasicAuthenticationFilter:处理 HTTP 基本认证。
  • ExceptionTranslationFilter:捕获安全异常,将其转化为符合客户端期望的响应。
  • FilterSecurityInterceptor:最终进行访问控制决策。

配置 Spring Security 过滤器链

Spring Security 的过滤器链默认通过 DelegatingFilterProxy 进行配置,通常可以在 Spring 的配置类中自定义和扩展。

XML 配置

如果你使用 XML 配置,可以通过 web.xml 配置 DelegatingFilterProxy

<filter><filter-name>springSecurityFilterChain</filter-name><filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping><filter-name>springSecurityFilterChain</filter-name><url-pattern>/*</url-pattern>
</filter-mapping><beans:beans xmlns="http://www.springframework.org/schema/security"xmlns:beans="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/securityhttp://www.springframework.org/schema/security/spring-security.xsdhttp://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><http><!-- 配置安全规则 --></http>
</beans:beans>
Java 配置

使用 Java 配置,通过继承 WebSecurityConfigurerAdapter 并重写其方法来自定义安全配置:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/public/**").permitAll().anyRequest().authenticated().and().formLogin().loginPage("/login").permitAll().and().logout().permitAll();}
}

Spring Security 拦截器

Spring Security 也提供了对拦截器的支持,比如方法级别的安全性(Method Security),可以通过注解来实现,如 @PreAuthorize@PostAuthorize

方法级别安全配置
启用方法级别的安全性

通过在配置类中启用方法级别的安全性:

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class MethodSecurityConfig {// 配置方法级别安全性
}
使用注解进行方法级别的安全控制
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.stereotype.Service;@Service
public class MyService {@PreAuthorize("hasRole('ROLE_USER')")public void userMethod() {// 只有角色为 ROLE_USER 的用户才能访问此方法}@PreAuthorize("hasRole('ROLE_ADMIN')")public void adminMethod() {// 只有角色为 ROLE_ADMIN 的用户才能访问此方法}
}

主要区别

  1. 使用场景
    • 过滤器:Spring Security 主要使用过滤器来处理整体的请求/响应安全。
    • 拦截器:拦截器主要用于更多细粒度的控制,如方法级别的安全性。
  2. 实现机制
    • 过滤器:是 Servlet 规范的一部分,负责在请求进入和响应离开 Web 容器时进行处理。过滤器在 Servlet 容器级别工作,先于所有 Spring 组件执行。拦截器在 Spring MVC 的处理流程中执行,在控制器(Controller)处理请求前后。
    • 拦截器:拦截器是基于 Spring 的 AOP(面向切面编程), 在 HandlerMappingHandlerAdapter 的工作范围内。通常是通过框架提供的机制实现,如 Spring MVC 的HandlerInterceptor。拦截器仅作用于被 Spring MVC 管理的 Controller 请求。
  3. 配置方式
    • 过滤器:通过 DelegatingFilterProxyspringSecurityFilterChain 进行配置。
    • 拦截器:通过注解 @EnableGlobalMethodSecurity 和相关安全注解进行配置。
  4. 拦截器适用场景
    • 对特定的 Controller 请求处理前后进行拦截或者封装。
    • 拦截器不具备认证、授权的过滤能力,因为它工作在处理层,而非请求链路的入口层。
    • 过滤器适合处理请求和响应的通用逻辑(如字符编码、CORS等)
    • 拦截器更适合与 Spring 框架集成的功能(如方法级别的权限验证、方法级别的日志记录等)

总结

Spring Security 主要通过过滤器链实现请求和响应的安全处理,但也提供了方法级别的安全控制支持,允许你通过拦截器和注解来进行细粒度的安全控制。过滤器用于全局的 HTTP 请求安全管理,而拦截器则用于更具体的方法级别的权限控制。

Spring Security 主要是通过过滤器链处理请求(身份认证、权限校验等核心操作),而不是使用拦截器。但在特定情况下,拦截器可以配合 Spring Security 完成一些额外的逻辑处理,比如记录审计日志、扩展特定的请求处理行为等。


过滤器 拦截器

public class PerformanceFilter implements Filter {

public class PerformanceInterceptor implements HandlerInterceptor {

过滤器(Filters)和拦截器(Interceptors)是 Java Web 开发中常用的两种机制,用于在请求到达控制器之前或响应返回客户端之前进行预处理或后处理。虽然它们都可以用于类似的目的,但在实现机制和应用场景上有所不同。

过滤器(Filters)

过滤器是 Servlet API 的一部分,主要用于对 HTTP 请求和响应进行预处理和后处理。过滤器可以拦截和修改请求和响应,但不会修改实际的控制器处理逻辑。

使用场景
  • 检查或修改请求参数
  • 进行身份验证和授权
  • 记录日志
  • 数据压缩或加密
示例代码

下面是一个简单的过滤器,它记录每个请求的处理时间:

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;@WebFilter(urlPatterns = "/*")
public class PerformanceFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {// 初始化代码}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {long startTime = System.currentTimeMillis();chain.doFilter(request, response);long endTime = System.currentTimeMillis();System.out.println("Request processed in " + (endTime - startTime) + " ms");}@Overridepublic void destroy() {// 销毁代码}
}
配置

可以使用 @WebFilter 注解或在 web.xml 文件中配置过滤器。上面的例子使用的是 @WebFilter 注解。

拦截器(Interceptors)

拦截器通常是框架(如 Spring MVC)提供的机制,不是 Servlet API 的一部分。它用于在控制器方法调用之前和之后进行处理。拦截器比过滤器更强大,可以访问更多的信息,如控制器方法参数,返回值等。

使用场景
  • 用户认证和授权
  • 日志记录和分析
  • 统一异常处理
  • 数据格式转换
示例代码

以下是一个简单的 Spring MVC 拦截器,用于记录每个请求的处理时间:

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class PerformanceInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {request.setAttribute("startTime", System.currentTimeMillis());return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,ModelAndView modelAndView) throws Exception {long startTime = (Long) request.getAttribute("startTime");long endTime = System.currentTimeMillis();System.out.println("Request processed in " + (endTime - startTime) + " ms");}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)throws Exception {// 完成处理}
}
配置

在 Spring MVC 中,你需要将拦截器注册到 WebMvcConfigurer

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configuration
public class WebConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new PerformanceInterceptor()).addPathPatterns("/**");}
}

主要区别

  1. 实现机制

    • 过滤器是 Servlet API 的一部分,可以应用于所有的 Servlet 请求。
    • 拦截器通常是框架(如 Spring MVC)提供的功能,主要用于控制器方法的调用。
  2. 使用范围

    • 过滤器可以应用于整个应用程序,无论是静态资源还是动态请求。
    • 拦截器通常只处理控制器方法的请求。
  3. 访问权限

    • 过滤器只能访问请求和响应对象,无法访问控制器方法的参数和返回值。
    • 拦截器可以访问控制器方法的参数和返回值,具有更高的灵活性。
  4. 配置方式

    • 过滤器可以在 web.xml 文件中配置,也可以使用注解。
    • 拦截器需要在框架配置文件中注册或使用代码进行配置。

总结

过滤器和拦截器都是预处理和后处理请求的有效机制,各有优缺点和适用的场景。在选择使用哪种机制时,可以根据需要处理的内容和应用程序的具体需求来选择。通常,过滤器适用于全局请求处理,而拦截器更适用于控制器级别的请求处理。

http://www.dtcms.com/wzjs/330628.html

相关文章:

  • 青海电商网站建设公司汽车品牌推广策划方案
  • 建一个网站需要网站程序吗网站优化平台
  • 视频网站开发需要什么语言网站的seo如何优化
  • 如何通过c语言来做网站卖友情链接的哪来那么多网站
  • 中国官网查询系统电脑优化用什么软件好
  • 淄博网站建设卓迅微信公众号怎么创建
  • 给一个公司做网站需要什么内容营销案例分享
  • 深圳做网站500元广告推广方案怎么写
  • 高校网站建设 安全教育最近几天的新闻大事
  • 工信部网站备案进度查询拼多多关键词优化是怎么弄的
  • 一个域名做多个网站日本进口yamawa
  • 成都网站建设前十推广引流平台
  • 上海营销型网站建设费用seo计费系统
  • 国外手机网站沈阳专业seo
  • 电子商务网站推广的目的东莞seo黑帽培训
  • 凡科建设网站入门版好不seo的优化技巧和方法
  • 做网站的图片的内存台州seo
  • 为什么做网站比app便宜seo技术最新黑帽
  • 福建龙岩有哪些网络平台北京seo课程培训
  • 上海网站建设备案号怎么恢复苏州seo网站推广哪家好
  • 拍摄宣传片费用明细seo技术培训价格表
  • 网站模版 下载工具seo快排优化
  • 公司网站建设好搜索推广代运营
  • 做网站简历怎么写国际新闻头条最新消息
  • 广州 四合一网站开发网站竞价推广托管公司
  • .net 做手机网站吗网站推广优化外链
  • 自建网站平台阿亮seo技术顾问
  • 石家庄网站制作设计郑州seo服务技术
  • 做网站会用到的代码单词十种营销方式
  • 视频推广网站百度关键词推广可以自己做吗