Spring 使用Aop 做切面日誌,和許可權。
第一步: 模擬使用者許可權
package com.inter;
public class Helper {
public static String role = "AAAA";
}
第二步: 業務方法介面
package com.inter;
public interface IDao {
public void addUser();
public void delUser();
public void updateUser();
public void queryUserInf();
}
第三步: 業務實現類
package com.inter.dao;
import com.inter.IDao;
public class UserDao implements IDao {
/* (non-Javadoc)
* @see com.inter.dao.IDao#addUser()
*/
public void addUser() {
System.out.println("增加使用者.....");
}
/* (non-Javadoc)
* @see com.inter.dao.IDao#delUser()
*/
public void delUser() {
System.out.println("刪除使用者.....");
}
/* (non-Javadoc)
* @see com.inter.dao.IDao#updateUser()
*/
public void updateUser() {
System.out.println("修改使用者...");
}
/* (non-Javadoc)
* @see com.inter.dao.IDao#queryUserInf()
*/
public void queryUserInf() {
System.out.println("查詢使用者");
}
}
第四步:AOP執行方法之前 執行:前置方法
package com.interceptor;
import java.lang.reflect.Method;
import org.apache.log4j.helpers.Loader;
import org.springframework.aop.AfterReturningAdvice;
import com.log.Loger;
public class AfterReturingAdvice implements AfterReturningAdvice {
@Override
public void afterReturning(Object returnValue, Method method,
Object[] args, Object target) throws Throwable {
System.out.println("進入了前置通知哦");
Loger log= Loger.getLoger();
log.loger.info("這裡進入了"+method.getName()+"方法");
log.WriteINFOLog("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
}
}
第五步: 環繞方法: 在執行方法時
package com.interceptor;
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import com.inter.Helper;
import com.log.Loger;
public class AroundAdvice implements MethodInterceptor {
@Override
public Object invoke(MethodInvocation arg0) throws Throwable {
Object obj = null;
if (Helper.role.equals("admin")) {
System.out.println("許可權足夠,繼續執行");
//Loger.log.debug("許可權足夠,繼續執行");
obj = arg0.proceed();
} else {
Loger.getLoger().WriteWARNLog("沒有許可權對此進行操作");
try{
int i=20/0;
}catch (Exception e) {
Loger.getLoger().loger.error("AroundAdvice.java 23行"+e.getMessage());
}
}
return obj;
}
}
第六步;執行方法後 後置方法
package com.interceptor;
import java.lang.reflect.Method;
import org.springframework.aop.MethodBeforeAdvice;
import com.log.Loger;
public class BeforeAdvice implements MethodBeforeAdvice {
@Override
public void before(Method method, Object[] args, Object target)
throws Throwable {
System.out.println("進入了後置通知哦");
//Loger.log.debug("進入了後置通知哦");
}
}
第七步: LOG4j 日誌類
package com.log;
import java.util.Properties;
import org.apache.commons.logging.Log;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
//單列模式
public class Loger {
public Logger loger=null;
private static Loger log;
private Loger()
{
loger =Logger.getLogger(this.getClass());
PropertyConfigurator.configure("C:\\Users\\jsontwo\\Workspaces\\MyEclipse 8.5\\AopLoger\\resources\\log.properties");
}
//記錄自己的日誌
public void WriteINFOLog(String logMessage)
{
loger.info(logMessage);
}
public void WriteDEBUGLog(String logMessage)
{
loger.info(logMessage);
}
public void WriteERRORLog(String logMessage)
{
loger.info(logMessage);
}
public void WriteWARNLog(String logMessage)
{
loger.info(logMessage);
}
public static Loger getLoger()
{
if(log!=null)
return log;
else
return new Loger();
}
}
第八步:測試方法:
package com.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.inter.IDao;
public class MyTset {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext(
"applicationContext.xml");
//從spring的代理類中得到UserDao
IDao dao = (IDao)ctx.getBean("proxyBean");
dao.delUser();
}
}
Spring 配置檔案:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!-- 定義bean -->
<bean id="userDao" class="com.inter.dao.UserDao"></bean>
<bean id="productDao" class="com.inter.dao.ProductDao"></bean>
<!-- 定義攔截器 -->
<bean id="beforeAdvice" class="com.interceptor.BeforeAdvice"></bean>
<bean id="afterAdvice" class="com.interceptor.AfterReturingAdvice"></bean>
<bean id="aroundAdvice" class="com.interceptor.AroundAdvice"></bean>
<!-- 使用正規表示式的包裝類去包裝攔截器 -->
<bean id="aroundAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
<property name="advice">
<ref bean="aroundAdvice"/>
</property>
<property name="patterns">
<list>
<value>.*.*</value>
</list>
</property>
</bean>
<!-- 定義代理類使用攔截器 -->
<bean id="proxyBean" class="org.springframework.aop.framework.ProxyFactoryBean">
<!-- 配置使用的介面,沒有可以不寫 -->
<property name="interfaces">
<list>
<value>com.inter.IDao</value>
</list>
</property>
<property name="interceptorNames">
<list>
<value>beforeAdvice</value>
<value>afterAdvice</value>
<value>aroundAdvisor</value>
</list>
</property>
<property name="target">
<ref bean="userDao"/>
</property>
</bean>
</beans>
相關文章
- 許可權控制及AOP日誌
- spring aop實現許可權管理Spring
- 提問:使用spring aop實現許可權管理Spring
- 關於 Laravel 日誌許可權Laravel
- Laravel Daily 日誌許可權問題LaravelAI
- 使用spring AOP管理許可權時攔截位置的困擾Spring
- spring2 Aop與事務、許可權管理Spring
- spring aop實現許可權控制,路徑控制Spring
- SpringSecurity許可權管理系統實戰—八、AOP 記錄使用者、異常日誌SpringGse
- Spring 面向切面AOPSpring
- Laravel 框架的日誌許可權問題Laravel框架
- Laravel 日誌檔案許可權問題Laravel
- 如何優雅的使用切面和註解實現許可權驗證
- Laravel 日誌有時候有許可權有時候沒有許可權?Laravel
- spring aop實現簡單的許可權控制功能Spring
- artisan日誌 root 許可權解決辦法
- Spring-AOP(面向切面)Spring
- 記一次 Laravel日誌許可權許可權問題(定時器導致)Laravel定時器
- 使用AOP+自定義註解完成spring boot的介面許可權校驗Spring Boot
- ThinkPHP6 寫入日誌許可權報錯PHP
- linux 檔案許可權 s 許可權和 t 許可權解析Linux
- Spring Boot 2.x 教程系列 | AOP 切面統一列印請求日誌Spring Boot
- mysql使用者和許可權MySql
- Android系統許可權和root許可權Android
- Spring系列:基於Spring-AOP和Spring-Aspects實現AOP切面程式設計Spring程式設計
- SpringAop實現許可權校驗與日誌列印Spring
- spring-boot-route(十七)使用aop記錄操作日誌Springboot
- 事務日誌傳送使用者許可權設定及配置(2篇)
- 選單許可權和按鈕許可權設定
- Oracle 使用者、物件許可權、系統許可權Oracle物件
- Spring AOP——Spring 中面向切面程式設計Spring程式設計
- 我使用Spring AOP實現了使用者操作日誌功能Spring
- Spring之AOP面向切面程式設計Spring程式設計
- spring security許可權認證Spring
- Spring AOP 實現業務日誌記錄Spring
- 基於RBAC做資料許可權
- k8s結合jumpserver做kubectl許可權控制 使用者在多個namespaces的訪問許可權 rbac許可權控制K8SServernamespace訪問許可權
- 【許可權管理】Oracle中檢視、回收使用者許可權Oracle