1. 程式人生 > >shiro 的整合許可權專案,利用SpringMVC aop 自動代理將系統必要監控操作寫入資料庫

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.

使用Idea建立ssm專案SpringMVC+Spring+MyBatis+Maven整合

                        1.建立基本專案