Springboot 整合Shiro自定義Filter
網上自定義Filter的實現很多,這裡我提供一種Springboot在程式碼中的實現。
Shiro提供的Filter我這裡不一一介紹了,一般基於web會話的都是使用authc(這是FormAuthenticationFilter)。根據我無狀態的登陸需求,選擇了AccessControlFilter,網上也有說這個是最被廣泛使用的,具體還是看自己需求吧。
Filter程式碼:
/**
* @author Created by pangkunkun on 2017/11/18.
*/
public class MyAccessControlFilter extends AccessControlFilter {
private static final Logger log= LoggerFactory.getLogger(MyAccessControlFilter.class);
/**
*
* 表示是否允許訪問;mappedValue就是[urls]配置中攔截器引數部分,如果允許訪問返回true,否則false;
* (感覺這裡應該是對白名單(不需要登入的介面)放行的)
* 如果isAccessAllowed返回true則onAccessDenied方法不會繼續執行
* 這裡可以用來判斷一些不被通過的連結(個人備註)
* * 表示是否允許訪問 ,如果允許訪問返回true,否則false;
* @param servletRequest
* @param servletResponse
* @param object 表示寫在攔截器中括號裡面的字串 mappedValue 就是 [urls] 配置中攔截器引數部分
* @return
* @throws Exception
* */
@Override
public boolean isAccessAllowed(ServletRequest servletRequest, ServletResponse servletResponse, Object object) throws Exception{
// Subject subject = getSubject(servletRequest,servletResponse);
// String url = getPathWithinApplication(servletRequest);
// log.info("當前使用者正在訪問的 url => " + url);
// log.info("subject.isPermitted(url);"+subject.isPermitted(url));
return false;
}
/**
* 表示當訪問拒絕時是否已經處理了;如果返回true表示需要繼續處理;如果返回false表示該攔截器例項已經處理了,將直接返回即可。
* onAccessDenied是否執行取決於isAccessAllowed的值,如果返回true則onAccessDenied不會執行;如果返回false,執行onAccessDenied
* 如果onAccessDenied也返回false,則直接返回,不會進入請求的方法(只有isAccessAllowed和onAccessDenied的情況下)
* */
@Override
public boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception{
System.out.println("onAccessDenied");
String username=request.getParameter(Constant.CRS_KEY);
String signature=request.getParameter(Constant.SIGNATURE);
String type=request.getParameter("type");
//TODO 通過其它引數驗證signature的正確性
String digestValue=MD5Utils.MD5SendParame(signature);
MyUsernamePasswordToken token=new MyUsernamePasswordToken(username,type, digestValue);
Subject subject= SecurityUtils.getSubject();
try {
subject.login(token);
}catch (Exception e){
log.info("登陸失敗");
log.info(e.getMessage());
onLoginFail(response);
return false;
}
log.info("登陸成功");
return true;
}
繼承這個filter 要實現兩個方法,每個方法我都有給出解釋。
isAccessAllowed這裡,根據從網上找的實現,我感覺這個是類似白名單被放行的。如果有些特殊的url不需要登入,可以直接在這裡通過,或者做其它的判斷。當然,這裡也可以砸Shiro配置中直接把相應的方法對應的filter欄設定成none,同樣不會經過這裡。
onAccessDenied是我主要邏輯功能處理的模組。在這裡主要是UsernamePasswordToken這塊,生成token物件後使用subject進行登入,以便後邊方法中許可權/角色的驗證。
將自定義filter整合進shiro配置:
@Bean
public ShiroFilterFactoryBean shirFilter(SecurityManager securityManager){
log.info("ShiroConfiguration.shirFilter()");
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
// 必須設定 SecurityManager
shiroFilterFactoryBean.setSecurityManager(securityManager);
//自定義攔截器
Map<String, Filter> filtersMap = new LinkedHashMap<String, Filter>();
filtersMap.put("myAccessControlFilter", new MyAccessControlFilter());
shiroFilterFactoryBean.setFilters(filtersMap);
//攔截器.
Map<String,String> filterChainDefinitionMap = new LinkedHashMap<String,String>();
filterChainDefinitionMap.put("/createPermission", "anon");
filterChainDefinitionMap.put("/**", "myAccessControlFilter");
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
return shiroFilterFactoryBean;
}
//自定義攔截器
Map<String, Filter> filtersMap = new LinkedHashMap<String, Filter>();
filtersMap.put("myAccessControlFilter", new MyAccessControlFilter());
shiroFilterFactoryBean.setFilters(filtersMap);
這塊程式碼是將自定義的攔截器設定進shiro的filterchain中。
filterChainDefinitionMap.put("/**", "myAccessControlFilter");
這裡是設定使用自定義攔截器的url。我這裡設定的是,如果沒有其他攔截器定義的,都有走這個自定義的攔截器。
相關推薦
Springboot 整合Shiro自定義Filter
網上自定義Filter的實現很多,這裡我提供一種Springboot在程式碼中的實現。 Shiro提供的Filter我這裡不一一介紹了,一般基於web會話的都是使用authc(這是FormAuthenticationFilter)。根據我無狀態的登陸需求,選擇
SpringBoot整合Shiro自定義Redis存儲
min locked 訪問控制 ride ora efault protect contex lan Shiro Shiro 主要分為 安全認證 和 接口授權 兩個部分,其中的核心組件為 Subject、 SecurityManager、 Realms,公共部分 Sh
SpringBoot整合thymeleaf(自定義)模板中文亂碼的解決辦法
樓主今天在學習SpringBoot整合thymelaf的時候報了中文亂碼的錯誤,經過網上的搜尋,現在得到解決的辦法,分享給大家: package com.imooc.config; import org.springframework.beans.BeansExcepti
SpringBoot整合Mybatis自定義攔截器,實現拼接sql和修改
一、應用場景 1.分頁,如com.github.pagehelper的分頁外掛實現; 2.攔截sql做日誌監控; 3.統一對某些sql進行統一條件拼接,類似於分頁。 二、MyBatis的攔截器簡介 然後我們要知道攔截器攔截什麼樣的物件,攔截物件的什麼行為,什麼時候攔截? &n
springboot初步認識---自定義filter
自動添加 println int ring resp () value mva https Spring Boot自動添加了OrderedCharacterEncodingFilter和HiddenHttpMethodFilter,直接自定義Filter。 步驟: 1.實現
SpringBoot 整合AOP 自定義註解
SpringBoot 整合Aop 完成自定義註解功能 前提是需要掌握一定的Spring Aop知識 第一步:引入jar <dependency> <groupId>org.springframewo
### shiro自定義filter【解決某個請求 需要同時擁有多種許可權】
1. shiro的filter介紹 <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"> <property name="s
springboot整合shiro遭遇自定義filter異常(自定義FormAuthenticationFilter)
最近忙著研究在 Springboot 上使用 Shiro 的問題。剛好就遇到個詭異事,百度 Google 也沒找到啥有價值的資訊,幾番周折自己解決了,這裡稍微記錄下。 自定義 Filter Shiro 支援自定義 Filter 大家都知道,也經常用,這裡我也用到了一個自定義 Filter,主
springboot整合Shiro,新增自定義filter後shiro的預設filter無法使用
在springboot中整合shiro,發現再添加了自定義的filter後預設的filter無法使用。 猜測是自定義的filter被放在了預設的filter前面,導致先被自定義的filter攔截了。 證實了的確是我所猜想的那般,自定義的filter被放在了shiro預
解決Shiro+SpringBoot自定義Filter不生效問題2
解決Shiro+SpringBoot自定義Filter不生效問題 在SpringBoot+Shiro實現安全框架的時候,自定義擴充套件了一些Filter,並註冊到ShiroFilter,但是執行的時候發現總是在ShiroFilter之前就進入了自定義Filter,結果當然是不對的。 &
springboot整合shiro認證時"username"更改為"account"或自定義的ShiroConfig配置
springboot整合shiro認證時"username"更改為"account"或自定義的配置package com.sxt.zhy.springboot.config; import java.util.HashMap; import java.util.Linked
SpringBoot整合shiro(二)自定義sessionManager
傳統結構專案中,shiro從cookie中讀取sessionId以此來維持會話,在前後端分離的專案中(也可在移動APP專案使用),我們選擇在ajax的請求頭中傳遞sessionId,因此需要重寫shiro獲取sessionId的方式。自定義ShiroSessio
前後分離,使用自定義token作為shiro認證標識,實現springboot整合shiro
直接進入主題,專案是使用springboot,框架用的shiro做許可權,mybatis做orm框架,專案需要做前後分離,這樣就會
springboot(八)自定義Filter
frame ide inf 執行權 tps pattern n) filters nts 自定義Filter 我們常常在項目中會使用filters用於錄調用日誌、排除有XSS威脅的字符、執行權限驗證等等。 Spring Boot自動添加了OrderedChara
【系統學習SpringBoot】SpringBoot自定義Filter
SpringBoot自定義Filter SpringBoot自動添加了OrderedCharacterEncodingFilter和HiddenHttpMethodFilter,當然我們可以自定 義Filter。 自定義Filter需要兩個步驟:
spring boot配置shiro自定義shiro filter匹配異常
原文地址:http://www.hillfly.com/2017/179.html最近忙著研究在 Springboot 上使用 Shiro 的問題。剛好就遇到個詭異事,百度 Google 也沒找到啥有價值的資訊,幾番周折自己解決了,這裡稍微記錄下。自定義 FilterTOCS
shiro框架之八-------自定義filter
寫在前面 我們知道,shiro框架在Java Web應用中使用時,本質上是通過filter方式整合的。 也就是說,它是遵循過濾器鏈規則的:filter的執行順序與在web.xml中定義的順序一致,如下所示: <filter> <filter-name>s
SpringBoot中Beetl自定義標籤的完美整合
今天接手一個專案,專案中使用SpringBoot,發現之前實現Beetl自定義標籤註冊的方式有些傻大粗,做了些修改,整理之後釋出,作為回顧。 Beetl自定義標籤 下面說一下在SpringBoot中關於Beetl自定義標籤的定義以及注入: 自定義標籤
SpringBoot 自定義filter 和 interceptor,自定義靜態檔案存放位置
上篇分享我們已經有了一個最基礎具有登陸驗證功能 的SpringBoot web專案,本篇對照之前SpringMVC 的xml配置,闡述SpringBoot 中的filter 和 interceptor。 一、web.xml中的filter 和 SpringBo
springboot自定義filter學習筆記
開發十年,就只剩下這套架構體系了! >>>