色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術(shù)文章
文章詳情頁

Spring Security之默認的過濾器鏈及自定義Filter操作

瀏覽:4日期:2023-07-07 11:46:06
Spring Security 過濾器鏈及自定義Filter別名 類名稱 Namespace Element or Attribute CHANNEL_FILTER ChannelProcessingFilter http/intercept-url@requires-channel SECURITY_CONTEXT_FILTER SecurityContextPersistenceFilter http CONCURRENT_SESSION_FILTER ConcurrentSessionFilter session-management/concurrency-control HEADERS_FILTER HeaderWriterFilter http/headers CSRF_FILTER CsrfFilter http/csrf LOGOUT_FILTER LogoutFilter http/logout X509_FILTER X509AuthenticationFilter http/x509 PRE_AUTH_FILTER AbstractPreAuthenticatedProcessingFilter( Subclasses) N/A CAS_FILTER CasAuthenticationFilter N/A FORM_LOGIN_FILTER UsernamePasswordAuthenticationFilter http/form-login BASIC_AUTH_FILTER BasicAuthenticationFilter http/http-basic SERVLET_API_SUPPORT_FILTER SecurityContextHolderAwareRequestFilter http/@servlet-api-provision JAAS_API_SUPPORT_FILTER JaasApiIntegrationFilter http/@jaas-api-provision REMEMBER_ME_FILTER RememberMeAuthenticationFilter http/remember-me ANONYMOUS_FILTER AnonymousAuthenticationFilter http/anonymous SESSION_MANAGEMENT_FILTER SessionManagementFilter session-management EXCEPTION_TRANSLATION_FILTER ExceptionTranslationFilter http FILTER_SECURITY_INTERCEPTOR FilterSecurityInterceptor http SWITCH_USER_FILTER SwitchUserFilter N/A

過濾器順序從上到下

自定義 Filter

自定義的 Filter 建議繼承 GenericFilterBean,本文示例:

package com.example.filter;import org.springframework.web.filter.GenericFilterBean;import javax.servlet.FilterChain;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import java.io.IOException;/** * @author 咸魚 * @date 2019-05-26 18:02 */public class BeforeLoginFilter extends GenericFilterBean { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {System.out.println('在 UsernamePasswordAuthenticationFilter 前調(diào)用');chain.doFilter(request, response); }}配置自定義 Filter 在 Spring Security 過濾器鏈中的位置

配置很簡單,本文示例:

@Override protected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers('/').permitAll().antMatchers('/user/**').hasAuthority('USER').and().formLogin().loginPage('/login').defaultSuccessUrl('/user').and().logout().logoutUrl('/logout').logoutSuccessUrl('/login');// 在 UsernamePasswordAuthenticationFilter 前添加 BeforeLoginFilterhttp.addFilterBefore(new BeforeLoginFilter(), UsernamePasswordAuthenticationFilter.class);// 在 CsrfFilter 后添加 AfterCsrfFilterhttp.addFilterAfter(new AfterCsrfFilter(), CsrfFilter.class); }

說明:

HttpSecurity 有三個常用方法來配置:

addFilterBefore(Filter filter, Class<? extends Filter> beforeFilter)

在 beforeFilter 之前添加 filter

addFilterAfter(Filter filter, Class<? extends Filter> afterFilter)

在 afterFilter 之后添加 filter

addFilterAt(Filter filter, Class<? extends Filter> atFilter)

在 atFilter 相同位置添加 filter, 此 filter 不覆蓋 filter

通過在不同 Filter 的 doFilter() 方法中加斷點調(diào)試,可以判斷哪個 filter 先執(zhí)行,從而判斷 filter 的執(zhí)行順序 。

spring security添加自定義過濾器

1、定義自己的過濾器

2、指定位置,通過HttpSecurity的方法指定

定義過濾器

package com.qiudaozhang.springsecurity.filter;import javax.servlet.*;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;public class RequestHeadCheckFilter implements Filter { @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {var httpRequest = (HttpServletRequest) servletRequest;var httpResponse = (HttpServletResponse) servletResponse;String requestId = httpRequest.getHeader('Request-id');if(requestId == null || requestId.isBlank()) { httpResponse.setStatus(HttpServletResponse.SC_BAD_REQUEST); return;}filterChain.doFilter(servletRequest,servletResponse); }}

package com.qiudaozhang.springsecurity.filter;import javax.servlet.*;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;public class RequestParamCheckFilter implements Filter { @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {var httpRequest = (HttpServletRequest) servletRequest;var httpResponse = (HttpServletResponse) servletResponse;String timestamp = httpRequest.getParameter('timestamp');if(timestamp == null || timestamp.isBlank()) { httpResponse.setStatus(HttpServletResponse.SC_FORBIDDEN); return;}filterChain.doFilter(servletRequest,servletResponse); }}指定位置

HttpSecurity中有兩個方法,指定過濾器的位置,一個指定在誰前面,一個指定在誰后面。

public HttpSecurity addFilterAfter(Filter filter, Class<? extends Filter> afterFilter) { this.comparator.registerAfter(filter.getClass(), afterFilter); return this.addFilter(filter); } public HttpSecurity addFilterBefore(Filter filter, Class<? extends Filter> beforeFilter) { this.comparator.registerBefore(filter.getClass(), beforeFilter); return this.addFilter(filter); }

package com.qiudaozhang.springsecurity.config;import com.qiudaozhang.springsecurity.filter.RequestHeadCheckFilter;import com.qiudaozhang.springsecurity.filter.RequestParamCheckFilter;import org.springframework.context.annotation.Configuration;import org.springframework.security.config.annotation.web.builders.HttpSecurity;import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;import org.springframework.security.web.authentication.www.BasicAuthenticationFilter;@Configurationpublic class ProjectConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception {http.addFilterBefore(new RequestHeadCheckFilter(),BasicAuthenticationFilter.class).addFilterAfter(new RequestParamCheckFilter(),BasicAuthenticationFilter.class).authorizeRequests().anyRequest().permitAll(); }}測試

準備一個端點測試

package com.qiudaozhang.springsecurity.controller;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class HelloController { @GetMapping('hello') public String hello () {return 'hello'; }}

Spring Security之默認的過濾器鏈及自定義Filter操作

當前沒有傳遞timestamp參數(shù),所以參照約定,過濾器直接給出403.

Spring Security之默認的過濾器鏈及自定義Filter操作

當前頭部信息和參數(shù)信息都提供了,檢測通過。

實際應(yīng)用場景 檢測相關(guān)的頭部,參數(shù)等等信息日志過濾器,將所有請求的相關(guān)數(shù)據(jù)記錄下來特殊的權(quán)限校驗等等。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持好吧啦網(wǎng)。

標簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 玖草在线| 亚洲精品国产福利一区二区三区 | 美女大片高清特黄a大片 | s8国产成人精品视频 | 性做爰片免费视频毛片中文i | 国产乱子精品免费视观看片 | 免费看香港一级毛片 | 伊人2222| 久久青草免费免费91线频观看 | 欧美xo影院 | 欧美一区二区三区在观看 | 国内精品91久久久久 | 国产精品成人亚洲 | 久久er热这里只有精品23 | 免费观看欧美一级片 | 男女上下爽无遮挡午夜免费视频 | 欧美日韩国产亚洲一区二区三区 | 在线播放 亚洲 | 欧美在线精品一区二区三区 | 一级一片免费视频播放 | 怡红院在线观看在线视频 | 黄色一级片在线看 | 精品午夜寂寞黄网站在线 | 一本色道久久88亚洲精品综合 | 一区二区三区四区在线免费观看 | 99九九99九九九视频精品 | 亚洲 欧美 日韩 在线 中文字幕 | 97se亚洲综合在线 | 日本免费在线一区 | 男人的天堂在线 | 中文字幕日韩三级 | 久草视频免费在线 | 丝袜精品 欧美 亚洲 自拍 | 亚洲第一视频网站 | 国产免费午夜a无码v视频 | 精品高清国产a毛片 | 欧美做a一级视频免费观看 欧美做爱毛片 | 久久成人免费大片 | 一区二区三区欧美视频 | 97久久精品午夜一区二区 | 尤蜜网站在线进入免费 |