商城网站建设套餐报价,seo百度点击软件,纯代码wordpress底部悬浮菜单,网站建设服务费怎么入账如果您像我一样#xff0c;那么您将拥有那种编程天#xff0c;一切似乎都进展顺利。 您编写代码和测试#xff0c;它就可以正常工作。 然后还有其他日子#xff0c;非常糟糕的日子#xff0c;在那儿#xff0c;您知道所编写的所有内容都尽可能正确#xff0c;并且代码拒… 如果您像我一样那么您将拥有那种编程天一切似乎都进展顺利。 您编写代码和测试它就可以正常工作。 然后还有其他日子非常糟糕的日子在那儿您知道所编写的所有内容都尽可能正确并且代码拒绝运行显然有些错误但是您不知道什么。 在为该博客编写代码时我经历了其中一种日子。 这个想法是为了演示如何使用Spring和Aspectj来审核用户对屏幕的访问。 审核面向用户的屏幕访问是面向方面编程AOP很好解决的少数交叉问题之一。 就我的演示代码而言其想法是您将注释添加到适当的控制器并且每次用户访问页面时都会记录该访问。 使用此技术您可以构建最流行的屏幕的图片从而构建应用程序中最流行的功能块。 知道了这些细节之后就可以更轻松地决定将开发目标放在何处因为开发几乎没有人使用过的那些应用程序块是没有用的。 在下面的博客中我之前已经讨论过AspectJ和AOP因为它们展示了基础知识但是很棒但是它们并不是真正的Spring MVC应用程序。 我以前的博客是 AOP和AspectJ术语 定义Spring的AspectJ建议类型 在Spring应用程序中使用AspectJ的After建议 使用Spring的AspectJ支持和Before批注 在Spring应用程序中使用AspectJ的AfterThrowing建议 这次我以为我会提出一个功能全面的Spring MVC应用程序它使用了一个有用的AOP跨领域关注点。 对于演示代码我创建了一个简单的Spring MVC应用程序该应用程序具有两个屏幕主页和帮助页面。 在此之上我创建了一个简单的批注 Audit 用于将控制器标记为需要审计的控制器并非所有控制器都需要尤其是如果您选择审计功能点而不是单个屏幕时并且告诉建议对象的屏幕ID如以下代码段所示 Audit(Home) RequestMapping(value /, method RequestMethod.GET) public String home(Locale locale, Model model) { 也就是说直到一切都变成梨形... 攻击的计划是编写我的简单Audit批注并使用一个简单的AuditAdvice类处理该批注该类具有用Aspectj的Before批注进行批注的方法。 然后我假装这是一个真正的建议类这意味着将实际的审计委托给自动连接的AuditService对象。 我首先使用Spring项目模板创建一个示例Spring MVC应用程序 然后我将所有代码放在一起并希望它能正常工作除非它不能工作无论我尝试了什么Spring都不AuditService自动装配到AuditAdvice类中。 这意味着当我的Before注释方法被调用时它引发了NullPointerException 当您强烈怀疑自己的代码正确并且无法正常工作时需要调查的领域之一就是项目POM文件和设置。 事实是当您使用别人的API项目设置或其他工具时您倾向于信任它的程度超过信任自己的代码的程度。 我猜这是因为它通常是由一个非常受人尊敬的组织编写的这使您觉得他们有一些神奇的方式来编写非常好的代码而且它通常包含一堆您没有的东西真的很明白 由于API工具配置文件等都是由像您和我这样的程序员编写的他们可能会犯与我们一样多的错误所以这确实是不合理的。 每当我登上飞机时这个事实通常都会让我感到担心因为您不想发生30,000英尺的软件错误。 Spring MVC项目POM的问题在于它已经过时并且充满了标准的Spring MVC Java应用程序所不需要的东西此外没有任何插件文档的链接因此请查找所有内容和不同的设置意味着什么很难。 前一段时间我确实写了一个名为Dissecting Spring的MVC Project POM的博客试图解释Spring MVC模板应用程序POM的工作方式。 这些是我必须对标准Spring MVC模板POM文件进行的更改才能使我的代码正常工作。 将项目使用的Spring版本更新为最新版本3.2.3.RELEASE 将AspectJ的版本更新为1.7.1 删除Spring Roo版本号。 这将创建创建以下版本属性 org.springframework-version3.2.3.RELEASE/org.springframework-version
org.aspectj-version1.7.1/org.aspectj-version 删除其他Spring Roo依赖项 !-- Roo dependencies --
dependencygroupIdorg.springframework.roo/groupIdartifactIdorg.springframework.roo.annotations/artifactIdversion${org.springframework.roo-version}/versionscopeprovided/scope
/dependency 这不是Roo项目我讨厌不必要的配置。 删除对Spring存储库的引用 repositories!-- For testing against latest Spring snapshots --repositoryidorg.springframework.maven.snapshot/idnameSpring Maven Snapshot Repository/nameurlhttp://maven.springframework.org/snapshot/urlreleasesenabledfalse/enabled/releasessnapshotsenabledtrue/enabled/snapshots/repository!-- For developing against latest Spring milestones --repositoryidorg.springframework.maven.milestone/idnameSpring Maven Milestone Repository/nameurlhttp://maven.springframework.org/milestone/urlsnapshotsenabledfalse/enabled/snapshots/repository
/repositories 本示例使用默认的WAR文件名因此删除对maven-war-plugin的引用 plugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-war-plugin/artifactIdconfigurationwarNameabc/warName/configuration
/plugin 更新Surefire插件以删除Roo参考 plugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-surefire-plugin/artifactIdconfigurationjunitArtifactNamejunit:junit/junitArtifactName!-- Remove the excludes --excludesexclude**/*_Roo_*/exclude/excludes/configuration
/plugin 添加aspectjweaver如下依赖aspectjrt dependencygroupIdorg.aspectj/groupIdartifactIdaspectjweaver/artifactIdversion${org.aspectj-version}/version
/dependency 删除AspectJ插件参考 plugingroupIdorg.codehaus.mojo/groupIdartifactIdaspectj-maven-plugin/artifactId!-- Have to use version 1.2 since version 1.3 does not appear to work with ITDs --version1.2/versiondependencies!-- You must use Maven 2.0.9 or above or these are ignored (see MNG-2972) --dependencygroupIdorg.aspectj/groupIdartifactIdaspectjrt/artifactIdversion${org.aspectj-version}/version/dependencydependencygroupIdorg.aspectj/groupIdartifactIdaspectjtools/artifactIdversion${org.aspectj-version}/version/dependency/dependenciesexecutionsexecutiongoalsgoalcompile/goalgoaltest-compile/goal/goals/execution/executionsconfigurationoutxmltrue/outxmlsource${java-version}/sourcetarget${java-version}/target/configuration
/plugin 这是引起所有问题的参考。 没有它将使用默认值并且该应用程序将运行。 更新tomcat-maven-plugin以进行自动部署。 plugingroupIdorg.codehaus.mojo/groupIdartifactIdtomcat-maven-plugin/artifactIdversion1.1/versionconfigurationservermyserver/serverurlhttp://localhost:8080/manager/text/url/configuration
/plugin 剩下下面的工作POM文件 ?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.captaindebug/groupIdartifactIdaudit/artifactIdpackagingwar/packagingversion1.0.0-BUILD-SNAPSHOT/versionpropertiesjava-version1.7/java-versionorg.springframework-version3.2.3.RELEASE/org.springframework-versionorg.aspectj-version1.7.1/org.aspectj-versionorg.slf4j-version1.5.10/org.slf4j-version/propertiesdependencies!-- Spring --dependencygroupIdorg.springframework/groupIdartifactIdspring-context/artifactIdversion${org.springframework-version}/versionexclusions!-- Exclude Commons Logging in favor of SLF4j --exclusiongroupIdcommons-logging/groupIdartifactIdcommons-logging/artifactId/exclusion/exclusions/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-webmvc/artifactIdversion${org.springframework-version}/version/dependency!-- AspectJ --dependencygroupIdorg.aspectj/groupIdartifactIdaspectjrt/artifactIdversion${org.aspectj-version}/version/dependencydependencygroupIdorg.aspectj/groupIdartifactIdaspectjweaver/artifactIdversion${org.aspectj-version}/version/dependency!-- Logging --dependencygroupIdorg.slf4j/groupIdartifactIdslf4j-api/artifactIdversion${org.slf4j-version}/version/dependencydependencygroupIdorg.slf4j/groupIdartifactIdjcl-over-slf4j/artifactIdversion${org.slf4j-version}/versionscoperuntime/scope/dependencydependencygroupIdorg.slf4j/groupIdartifactIdslf4j-log4j12/artifactIdversion${org.slf4j-version}/versionscoperuntime/scope/dependencydependencygroupIdlog4j/groupIdartifactIdlog4j/artifactIdversion1.2.15/versionexclusionsexclusiongroupIdjavax.mail/groupIdartifactIdmail/artifactId/exclusionexclusiongroupIdjavax.jms/groupIdartifactIdjms/artifactId/exclusionexclusiongroupIdcom.sun.jdmk/groupIdartifactIdjmxtools/artifactId/exclusionexclusiongroupIdcom.sun.jmx/groupIdartifactIdjmxri/artifactId/exclusion/exclusionsscoperuntime/scope/dependency!-- Inject --dependencygroupIdjavax.inject/groupIdartifactIdjavax.inject/artifactIdversion1/version/dependency!-- Servlet --dependencygroupIdjavax.servlet/groupIdartifactIdservlet-api/artifactIdversion2.5/versionscopeprovided/scope/dependencydependencygroupIdjavax.servlet.jsp/groupIdartifactIdjsp-api/artifactIdversion2.1/versionscopeprovided/scope/dependencydependencygroupIdjavax.servlet/groupIdartifactIdjstl/artifactIdversion1.2/version/dependency!-- Test --dependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.7/versionscopetest/scope/dependency/dependenciesbuildpluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-compiler-plugin/artifactIdconfigurationsource${java-version}/sourcetarget${java-version}/target/configuration/pluginplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-surefire-plugin/artifactIdconfigurationjunitArtifactNamejunit:junit/junitArtifactName/configuration/pluginplugingroupIdorg.codehaus.mojo/groupIdartifactIdtomcat-maven-plugin/artifactIdversion1.1/versionconfigurationservermyserver/serverurlhttp://localhost:8080/manager/text/url/configuration/plugin/plugins/build
/project 最后……正确设置了项目设置接下来要做的是继续执行代码这是我下次要介绍的内容。 有关此代码和下一个博客的代码请访问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