shiro 的整合許可權專案,利用SpringMVC aop 自動代理將系統必要監控操作寫入資料庫
1) 底層配置
通過配置織入@Aspectj切面
雖然可以通過程式設計的方式織入切面,但是一般情況下,我們還是使用spring的配置自動完成建立代理織入切面的工作。
通過aop名稱空間的宣告自動為spring容器中那些配置@aspectJ切面的bean建立代理,織入切面。當然,spring
在內部依舊採用AnnotationAwareAspectJAutoProxyCreator進行自動代理的建立工作,但具體實現的細節已經被隱藏起來了
有一個proxy-target-class屬性,預設為false,表示使用jdk動態代理織入增強,當配為時,表示使用CGLib動態代理技術織入增強。不過即使proxy-target-class設定為false,如果目標類沒有宣告介面,則spring將自動使用CGLib動態代理。
@AspectJ語法基礎
@AspectJ使用jdk5.0註解和正規則的AspectJ 5的切面表示式語言描述切面,由於spring只支援方法的連線點,所以spring僅支援部分aspectJ的切面語言,在這節時,我們將對AspectJ切點表示式語言進行必要的學習。
以下是Spring-mvc 的掃描配置
2) 切點日誌寫入類
/**
* @description:AOP 日誌
* @author:wang
*/
@Aspect
@Component
public class SysLogAspect {
private static final Logger LOGGER = LogManager.getLogger(SysLogAspect.class);
@Autowired private ISysLogService sysLogService; @Pointcut("within(@org.springframework.stereotype.Controller *)") public void cutController() {} @Around("cutController()") public Object recordSysLog(ProceedingJoinPoint point) throws Throwable { String strMethodName = point.getSignature().getName(); String strClassName = point.getTarget().getClass().getName(); Object[] params = point.getArgs(); StringBuffer bfParams = new StringBuffer(); Enumeration<String> paraNames = null; HttpServletRequest request = null; if (params != null && params.length > 0) { request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); paraNames = request.getParameterNames(); String key; String value; while (paraNames.hasMoreElements()) { key = paraNames.nextElement(); value = request.getParameter(key); bfParams.append(key).append("=").append(value).append("&"); } if (StringUtils.isBlank(bfParams)) { bfParams.append(request.getQueryString()); } } String strMessage = String .format("[類名]:%s,[方法]:%s,[引數]:%s", strClassName, strMethodName, bfParams.toString()); LOGGER.info(strMessage); if (isWriteLog(strMethodName)) { try { Subject currentUser = SecurityUtils.getSubject(); PrincipalCollection collection = currentUser.getPrincipals(); if (null != collection) { String loginName = collection.getPrimaryPrincipal().toString(); SysLog sysLog = new SysLog(); // 監控物件 sysLog.setLoginName(loginName); sysLog.setRoleName(loginName); sysLog.setOptContent(strMessage); sysLog.setCreateTime(new Date()); if (request != null) { sysLog.setClientIp(request.getRemoteAddr()); } LOGGER.info(sysLog.toString()); sysLogService.insert(sysLog); } } catch (Exception e) { LOGGER.error(e.getMessage(), e); } } return point.proceed(); } private boolean isWriteLog(String method) { String[] pattern = {"login", "logout", "add", "edit", "update", "delete", "grant", "lockedVirtualInv", "batchListingYouzan", "batchDelistingYouzan", "batchSynItemYouzan", "splitErpOrder", "releaseInventory"};// 將要監控的方法匹配寫入log 日誌; 正式寫入監控表 for (String s : pattern) { if (method.indexOf(s) > -1) { return true; } } return false; }
}
相關推薦
shiro 的整合許可權專案,利用SpringMVC aop 自動代理將系統必要監控操作寫入資料庫
1) 底層配置 通過配置織入@Aspectj切面 雖然可以通過程式設計的方式織入切面,但是一般情況下,我們還是使用spring的配置自動完成建立代理織入切面的工作。 通過aop名稱空間的宣告自動為spring容器中那些配置@aspectJ切面的bean建立
maven專案中SSM+Shiro整合配置中,在有SpringMVC+MyBatis配置下整合shiro的配置步驟
最近在做SSM(SpringMVC+Shiro+MyBatis)整合的一個專案,對於shiro的配置不是特別熟練,於是想要寫下來,加深一下印象。在有SpringMVC+MyBatis配置的基礎上整合shiro: 首先進入shiro的官方網站(http
單點登入cas與許可權管理框架shiro整合-spring專案方式
之前那篇文章介紹了普通web專案中單點登入cas與許可權管理框架shiro整合方式,這裡說下spring專案中的整合方式,首先還是配置一個filter Java程式碼 <filter> <filter-name>shiroFilter&
SpringBoot與Shiro整合-許可權管理實戰視訊筆記(之三)
本文內容大部分來自黑馬視訊的SpringBoot與Shiro整合-許可權管理實戰視訊,在此記錄為個人學習筆記。 可按步驟操作,無法實操的實戰blog都是耍流氓。 七、Shiro授權-使用Shiro過濾器實現授權頁面攔截 1. 在S
SpringBoot與Shiro整合-許可權管理實戰視訊筆記(之一)
本文內容大部分來自黑馬視訊的SpringBoot與Shiro整合-許可權管理實戰視訊,在此記錄為個人學習筆記。 可按步驟操作,無法實操的實戰blog都是耍流氓。 一、搭建SpringBoot開發環境 1. 安裝好開發軟體和Mave
koa專案,利用koa框架完成mcv風格程式碼書寫及基本的常用操作
現在工作用到node.js,express很好koa也不差,關鍵是公司現在專案用koa,所以打算寫這個例子,加強koa學習提升。平時看github上的程式碼感覺不是很規範,程式碼很隨意,極不方便閱讀也不利於程式碼維護。打算寫個稍微規範的demo,以傳統mvc風格來寫koa專
maven整合SSM專案,Tomcat部署執行——SSM整合框架搭建
開發十年,就只剩下這套架構體系了! >>>
SpringBoot與Shiro整合許可權管理實戰
SpringBoot與Shiro整合許可權管理實戰 作者 : Stanley 羅昊 【轉載請註明出處和署名,謝謝!】 *觀看本文章需要有一定SpringBoot整合經驗* Shiro框架簡介 Apache Shiro是一個強大且易用的Java安全框架,執行身份驗證、授權、密碼學和會話管理。使用Shiro的易於
鬼才排行榜第一名,利用硬件與Python自制智能監控系統
www 限制 -s 攝像 name img 卸載 激活 pytho 萌芽 原文作者丨zw97073966 轉載丨https://www.toutiao.com/i6588370159117795843/ 頭條號:空手憶歲月 交流群:548377875 1:暑假在家很無聊 想
Vue SPA 專案,瀏覽器和 nginx 反向代理快取問題解決實方案
問題背景a.瀏覽器端在每次釋出新的版本時候,總會出現因為SPA專案中index.html檔案(200 ok from disk cache 不傳送請求,直接取用了本地磁碟快取)和服務端版本不一致的問題,導致使用者不能及時更新,需要通過手動重新整理來強制從服務端更新檔案。b.補充一下,服務端和瀏覽器之間架構
在Visual Studio中的mvc專案下利用AngularJS實現單頁面中的增刪改操作
執行效果如下(利用了AngularJS的雙向繫結進行修改): 原始碼如下: @{ ViewBag.Title = "Index"; } <script src="https://cdn.staticfile.org/angular.js/1.4.6/angular.mi
使用Spring整合Hibernate配置,根據實體類自動建立表
<?xml version="1.0" encoding="UTF-8"?> <beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instan
Vue、Nuxt服務端渲染,NodeJS全棧專案,面試小白的部落格系統~~
![](https://user-gold-cdn.xitu.io/2020/7/1/1730b15676ec8c32?w=1920&h=1080&f=jpeg&s=181162) Holle,大家好,我是李白!! 一時興起的開源專案,到這兒就告一段落了。 這是一個入門全棧之路的小專案,從設計、
Spring的AOP自動代理(含AspectJ的AOP開發)
1.自動代理: 上面這兩種代理的方式不好,需要為每一個類配置一個獨立的ProxyFactoryBean.(如果需要代理的類特別的多,每個類都需要建立一個代理的類.) 根據切面Advisor的定
spring aop自動代理註解配置失效問題及原理機制整理總結
迭代中遇到的問題處理 問題:用自動代理註解配置攔截了PlanService類的方法testAopFace,方法testAopFace被PlanService類的方法query呼叫。http請求controller後呼叫了方法query,aop對方法testAopFace
Spring Mvc那點事---(30)Spring Mvc傳統AOP自動代理實現
Spring 傳統AOP可以實現自動代理,不需要專門指定代理,可以在類生成的時候自動代理,有兩種方式實現自動代理,基於Bean名稱的自動代理 BeanNameAutoProxyCre
Spring AOP 自動代理執行增強
基本類 package com.advice; /** * @author Duoduo * @version 1.0 * @date 2017/4/25 23:41 */ pu
Shiro 整合SpringMVC 並且實現許可權管理,登入和登出
Apache Shiro是Java的一個安全框架。目前,使用Apache Shiro的人越來越多,因為它相當簡單,對比Spring Security,可能沒有Spring Security做的功能強大,但是在實際工作時可能並不需要那麼複雜的東西,所以使用小而簡單
springboot專案,thymeleaf整合shiro
github地址:https://github.com/theborakompanioni/thymeleaf-extras-shiro ps:此文章需要相應的shiro基礎,內容很精簡 1.pom.xml <properties> <project.