日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

使用AspectJ审计Spring MVC Webapp。 第1部分

發(fā)布時間:2023/12/3 javascript 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用AspectJ审计Spring MVC Webapp。 第1部分 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

如果您像我一樣,那么您將擁有那種編程天,一切似乎都進(jìn)展順利。 您編寫代碼和測試,它就可以正常工作。 然后還有其他日子,非常糟糕的日子,在那兒,您知道所編寫的所有內(nèi)容都盡可能正確,并且代碼拒絕運行:顯然有些錯誤,但是您不知道什么。 在為該博客編寫代碼時,我經(jīng)歷了其中一種日子。 這個想法是為了演示如何使用Spring和Aspectj來審核用戶對屏幕的訪問。

審核面向用戶的屏幕訪問是面向方面編程(AOP)很好解決的少數(shù)交叉問題之一。 就我的演示代碼而言,其想法是,您將注釋添加到適當(dāng)?shù)目刂破?#xff0c;并且每次用戶訪問頁面時,都會記錄該訪問。 使用此技術(shù),您可以構(gòu)建最流行的屏幕的圖片,從而構(gòu)建應(yīng)用程序中最流行的功能塊。 知道了這些細(xì)節(jié)之后,就可以更輕松地決定將開發(fā)目標(biāo)放在何處,因為開發(fā)幾乎沒有人使用過的那些應(yīng)用程序塊是沒有用的。

在下面的博客中,我之前已經(jīng)討論過AspectJ和AOP,因為它們展示了基礎(chǔ)知識,但是很棒,但是它們并不是真正的Spring MVC應(yīng)用程序。 我以前的博客是:

  • AOP和AspectJ術(shù)語
  • 定義Spring的AspectJ建議類型
  • 在Spring應(yīng)用程序中使用AspectJ的@After建議
  • 使用Spring的AspectJ支持和@Before批注
  • 在Spring應(yīng)用程序中使用AspectJ的@AfterThrowing建議

這次我以為我會提出一個功能全面的Spring MVC應(yīng)用程序,它使用了一個有用的AOP跨領(lǐng)域關(guān)注點。

對于演示代碼,我創(chuàng)建了一個簡單的Spring MVC應(yīng)用程序,該應(yīng)用程序具有兩個屏幕:主頁和幫助頁面。 在此之上,我創(chuàng)建了一個簡單的批注: @Audit ,用于將控制器標(biāo)記為需要審計的控制器(并非所有控制器都需要,尤其是如果您選擇審計功能點而不是單個屏幕時),并且告訴建議對象的屏幕ID,如以下代碼段所示:

@Audit("Home") @RequestMapping(value = "/", method = RequestMethod.GET) public String home(Locale locale, Model model) {

也就是說,直到一切都變成梨形...

攻擊的計劃是編寫我的簡單@Audit批注,并使用一個簡單的AuditAdvice類處理該批注,該類具有用Aspectj的@Before批注進(jìn)行批注的方法。 然后,我假裝這是一個真正的建議類,這意味著將實際的審計委托給自動連接的AuditService對象。

我首先使用Spring項目模板創(chuàng)建一個示例Spring MVC應(yīng)用程序:

然后,我將所有代碼放在一起,并希望它能正常工作,除非它不能工作:無論我嘗試了什么,Spring都不AuditService自動裝配到AuditAdvice類中。 這意味著當(dāng)我的@Before注釋方法被調(diào)用時,它引發(fā)了NullPointerException

當(dāng)您強(qiáng)烈懷疑自己的代碼正確并且無法正常工作時,需要調(diào)查的領(lǐng)域之一就是項目POM文件和設(shè)置。

事實是,當(dāng)您使用別人的API,項目設(shè)置或其他工具時,您傾向于信任它的程度超過信任自己的代碼的程度。 我猜這是因為它通常是由一個非常受人尊敬的組織編寫的,這使您覺得他們有一些神奇的方式來編寫非常好的代碼,而且它通常包含一堆您沒有的東西真的很明白

由于API,工具,配置文件等都是由像您和我這樣的程序員編寫的,他們可能會犯與我們一樣多的錯誤,所以這確實是不合理的。

每當(dāng)我登上飛機(jī)時,這個事實通常都會讓我感到擔(dān)心,因為您不想發(fā)生30,000英尺的軟件錯誤。

Spring MVC項目POM的問題在于,它已經(jīng)過時并且充滿了標(biāo)準(zhǔn)的Spring MVC Java應(yīng)用程序所不需要的東西,此外,沒有任何插件文檔的鏈接,因此請查找所有內(nèi)容和不同的設(shè)置意味著什么很難。

前一段時間,我確實寫了一個名為Dissecting Spring的MVC Project POM的博客,試圖解釋Spring MVC模板應(yīng)用程序POM的工作方式。

這些是我必須對標(biāo)準(zhǔn)Spring MVC模板POM文件進(jìn)行的更改,才能使我的代碼正常工作。

  • 將項目使用的Spring版本更新為最新版本:3.2.3.RELEASE
  • 將AspectJ的版本更新為1.7.1
  • 刪除Spring Roo版本號。

    這將創(chuàng)建創(chuàng)建以下版本屬性:

    <org.springframework-version>3.2.3.RELEASE</org.springframework-version> <org.aspectj-version>1.7.1</org.aspectj-version>
  • 刪除其他Spring Roo依賴項: <!-- Roo dependencies --> <dependency><groupId>org.springframework.roo</groupId><artifactId>org.springframework.roo.annotations</artifactId><version>${org.springframework.roo-version}</version><scope>provided</scope> </dependency>

    這不是Roo項目,我討厭不必要的配置。

  • 刪除對Spring存儲庫的引用: <repositories><!-- For testing against latest Spring snapshots --><repository><id>org.springframework.maven.snapshot</id><name>Spring Maven Snapshot Repository</name><url>http://maven.springframework.org/snapshot</url><releases><enabled>false</enabled></releases><snapshots><enabled>true</enabled></snapshots></repository><!-- For developing against latest Spring milestones --><repository><id>org.springframework.maven.milestone</id><name>Spring Maven Milestone Repository</name><url>http://maven.springframework.org/milestone</url><snapshots><enabled>false</enabled></snapshots></repository> </repositories>
  • 本示例使用默認(rèn)的WAR文件名,因此刪除對maven-war-plugin的引用: <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><configuration><warName>abc</warName></configuration> </plugin>
  • 更新Surefire插件以刪除Roo參考: <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><configuration><junitArtifactName>junit:junit</junitArtifactName><!-- Remove the excludes --><excludes><exclude>**/*_Roo_*</exclude></excludes></configuration> </plugin>
  • 添加aspectjweaver如下依賴aspectjrt <dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>${org.aspectj-version}</version> </dependency>
  • 刪除AspectJ插件參考: <plugin><groupId>org.codehaus.mojo</groupId><artifactId>aspectj-maven-plugin</artifactId><!-- Have to use version 1.2 since version 1.3 does not appear to work with ITDs --><version>1.2</version><dependencies><!-- You must use Maven 2.0.9 or above or these are ignored (see MNG-2972) --><dependency><groupId>org.aspectj</groupId><artifactId>aspectjrt</artifactId><version>${org.aspectj-version}</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjtools</artifactId><version>${org.aspectj-version}</version></dependency></dependencies><executions><execution><goals><goal>compile</goal><goal>test-compile</goal></goals></execution></executions><configuration><outxml>true</outxml><source>${java-version}</source><target>${java-version}</target></configuration> </plugin>

    這是引起所有問題的參考。 沒有它,將使用默認(rèn)值,并且該應(yīng)用程序?qū)⑦\行。

  • 更新tomcat-maven-plugin以進(jìn)行自動部署。 <plugin><groupId>org.codehaus.mojo</groupId><artifactId>tomcat-maven-plugin</artifactId><version>1.1</version><configuration><server>myserver</server><url>http://localhost:8080/manager/text</url></configuration> </plugin>

    剩下下面的工作POM文件

    <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.captaindebug</groupId><artifactId>audit</artifactId><packaging>war</packaging><version>1.0.0-BUILD-SNAPSHOT</version><properties><java-version>1.7</java-version><org.springframework-version>3.2.3.RELEASE</org.springframework-version><org.aspectj-version>1.7.1</org.aspectj-version><org.slf4j-version>1.5.10</org.slf4j-version></properties><dependencies><!-- Spring --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${org.springframework-version}</version><exclusions><!-- Exclude Commons Logging in favor of SLF4j --><exclusion><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${org.springframework-version}</version></dependency><!-- AspectJ --><dependency><groupId>org.aspectj</groupId><artifactId>aspectjrt</artifactId><version>${org.aspectj-version}</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>${org.aspectj-version}</version></dependency><!-- Logging --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>${org.slf4j-version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>jcl-over-slf4j</artifactId><version>${org.slf4j-version}</version><scope>runtime</scope></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>${org.slf4j-version}</version><scope>runtime</scope></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.15</version><exclusions><exclusion><groupId>javax.mail</groupId><artifactId>mail</artifactId></exclusion><exclusion><groupId>javax.jms</groupId><artifactId>jms</artifactId></exclusion><exclusion><groupId>com.sun.jdmk</groupId><artifactId>jmxtools</artifactId></exclusion><exclusion><groupId>com.sun.jmx</groupId><artifactId>jmxri</artifactId></exclusion></exclusions><scope>runtime</scope></dependency><!-- @Inject --><dependency><groupId>javax.inject</groupId><artifactId>javax.inject</artifactId><version>1</version></dependency><!-- Servlet --><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.1</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><!-- Test --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.7</version><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>${java-version}</source><target>${java-version}</target></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><configuration><junitArtifactName>junit:junit</junitArtifactName></configuration></plugin><plugin><groupId>org.codehaus.mojo</groupId><artifactId>tomcat-maven-plugin</artifactId><version>1.1</version><configuration><server>myserver</server><url>http://localhost:8080/manager/text</url></configuration></plugin></plugins></build> </project>
  • 最后……正確設(shè)置了項目設(shè)置,接下來要做的是繼續(xù)執(zhí)行代碼,這是我下次要介紹的內(nèi)容。

    有關(guān)此代碼和下一個博客的代碼,請訪問github: https : //github.com/roghughe/captaindebug/tree/master/audit-aspectj

    參考: 使用AspectJ審計Spring MVC Webapp。 來自JCG合作伙伴 Roger Hughes的第一部分,來自Captain Debug的Blog博客。

    翻譯自: https://www.javacodegeeks.com/2013/07/auditing-a-spring-mvc-webapp-with-aspectj-part-1.html

    創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

    總結(jié)

    以上是生活随笔為你收集整理的使用AspectJ审计Spring MVC Webapp。 第1部分的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。