问题标签 [spring-aspects]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
spring - 如何使用 Spring AOP 的 Aspect 做非常复杂的审计日志记录?
我正在构建一个 Spring Web 应用程序。使用 Spring AOP 的切面做审计日志。
我有如下方法的商务舱,我想在某些情况下审核日志
- 在方法执行期间
方法返回后
/li>
我已经在一个单独的类中定义了 Aspects。
我遇到了问题,因为我在这里和其他文章中看到的所有常见简单示例似乎都非常简单。例如,它们很容易工作,因为我见过的最复杂的只是将方法参数提取到方面的建议中。
但我的问题是,我不想以某种方式不仅将局部变量提取到 Aspect 的建议中,而且还要根据某些条件多次进行审计日志记录。
不要误会我的意思,我们已经让 Log4j 日志记录到相同位置的文件,但我们也需要将这些审计日志记录到数据库。
我只想知道什么是解决方案来实现我想要在高水平上做的事情。
对代码格式稍差的道歉......(主要是伪代码)。我只是无法让这种代码格式在 StackOverflow 上工作。在 Github markdown 上要容易得多。
spring - 在尝试匹配之前必须设置属性“表达式”
当我试图解决这个SO 问题时......
我面对
java - 如何在 Spring webflow 中建议 flowscope bean
我的项目正在使用 Spring web flow 2.4,我需要使用 Spring AOP 来建议流范围 bean 来处理诸如日志记录之类的方面要求。这是方面类:
并在根 WebApplicationContext 中定义 autoproxy:
以及每个单独的 -flow.xml 文件
我使用相同的模式轻松地建议服务 bean 和控制器,但它不适用于流范围的 bean,方面永远不会执行。我认为这可能与 JDK 动态接口代理有关,但是 CGLIB 也失败了(设置了 proxy-target-class="true" 属性)。切入点从未被拦截。所以我怀疑 flow-scope bean 在实例化时从未正确代理过。
我试图切换到 LTW,但它抛出了 NoSuchMethodError(bean 是从 weaveinfo 日志中编织的)。也许最好单独为此打开另一个线程。
我的问题是,是否可以使用 Spring AOP 来建议流范围 bean 以及如何做到这一点?
java - Spring AOP 不适用于包含 @Transactional 方法的类
我开发网络应用程序,需要存储重量级文件并为此目的使用 Apache FTP 服务器。当新用户注册他的帐户时,必须在远程服务器上创建以他的用户名命名的文件夹。为了建立连接,在执行 UserCreatingServiceImpl.createUser() 方法之前,我使用 Spring AOP:
这是带有 createUser() 方法的服务类:
一切正常,直到我将 @Transactional 方法添加到服务类:
现在 Aspect 类的方法不会调用。你能解释一下原因吗。提前感谢您的帮助。
intellij-idea - 方面定义的方法上的 IntelliJ IDEA“无法解析方法”
我正在使用spring-data-neo4j 3.4.2,它(可选)使用 AspectJ。
我的 IDE 是 IntelliJ IDEA 16(EAP,IU-144.3891.8)。我在使用最新的 IntelliJ IDEA 15 时遇到了同样的问题。
到目前为止,在 IntelliJ 中一切正常,我可以编译、运行我的单元测试、在 Wildfly 上部署和运行我的 Web 应用程序等等。
在 IntelliJ 中构建我的项目时,我可以看到所需方面的使用情况(以下警告是可以的)。
我的问题:IntelliJ IDEA 正确使用了 spring-aspects/ajc。但是在编辑器中,这些方面没有解决/使用。代码完成等不起作用。
在 AspectJ-facet 配置中,aspect-path 被配置为建议。
插件“AspectJ Support”和“Spring AOP/@AspectJ”已安装并处于活动状态。
我想在我的编辑器中使用弹簧(数据)方面,有什么建议,IntelliJ 编辑器如何了解这些方面?
java - 如何使用 1.0.3 版本的 Spring Retry 启用 Spring 重试?
要启用 Spring 重试,可以在 Java 注释中启用重试:在 Configuration 中使用 @EnableRetry 或在 XML 配置文件中指定重试:
这两个规范都基于仅从版本 1.1.2 开始的…annotation.RetryConfiguration。如何在以前的版本中启用 XML 配置中的重试?由于兼容性问题,我无法使用 1.1.2 版。重试配置如下:
spring-aop - Spring AOP 被意外调用
我在我们的应用程序中为 2 个不同的包配置了 Spring AOP 来记录异常。每个包有 2 种不同的配置:
在服务方法调用中,会调用属于这些包中的每一个的类的方法:
公共无效方法(){
方法1();-> 包 abc
方法2();-> 包 xyz
}
在调用 logExceptionXYZ 方法的方法 2 中发生了一些异常,我们将它包装在一个通用异常中,比如 ExceptionXYZ,并进一步抛出它。
但是在这之后,logExceptionABC 方法也会被调用并抛出一个通用异常,比如 ExceptionABC。
我无法理解为什么调用 logExceptionABC 方法?
如果有人知道这样的问题,请告诉我!
问候, 拉胡尔
java - 使用 Angular JS 在 Spring Security 中登录过程后缺少 CSFR_TOKEN 会话属性
我对使用 CSRF 的 AngularJS 的 Spring Security 有疑问。
我的实现基于此文档:
http://spring.io/guides/tutorials/spring-security-and-angular-js/
我的问题是登录/注销过程没有正确管理。
登录阶段似乎进展顺利:响应正常,创建了 Java 会话,并且记录了Principal的属性“ SPRING_SECURITY_CONTEXT ” 。但是在登录过程之后,我注意到在会话对象中缺少 CSFR_TOKEN的属性。
这会导致这种效果:当我尝试注销时,我传递了带有 Spring Security 所需的所有标头的请求。但是org.springframework.security.web.csrf.CsrfFilter类的“ doFilterInternal ”方法无法检索到属性:
这会导致令牌的重新生成,因为“令牌丢失”(在会话对象中,而不是在请求标头中),所以当“doFilterInternal”使用请求中传递的令牌进行匹配控制时,匹配失败并在它打印的 Spring 日志:“为 ...找到了无效的 CSRF 令牌”
这个问题停止了过滤器链:在自定义“csrfHeaderFilter”中创建的过滤器没有被调用,因为在标准过滤器之后被调用,所以我有这个错误页面作为返回:
HTTP 状态 403 - 未找到预期的 CSRF 令牌。你的会话过期了吗?
会话未过期。事实上,如果我在浏览器上刷新页面,我可以看到我仍然处于登录状态。在日志中我可以看到用户名仍然存在,并且在会话中完美地保存了 Principal 对象。
如果我在页面刷新后重试注销,注销不会再失败,因为在会话中现在存在属性“CSRF_TOKEN” 。并且注销过程得到了完美的管理,因为在那之后我的请求中有一个空会话。
那有什么问题?
这是我的实际安全配置:
这些是第一次注销尝试时的请求标头(不刷新)
java - 如何将自定义 DaoAuthenticationProvider 加载到 Spring 上下文中?
我对 Spring Security 有这个问题。
我有一个带有 SecurityConfig 类的 java-config 实现,它扩展了 WebSecurityConfigurerAdapter。
在这个类中,我想重写方法“configure()”
一切都好,它的工作原理。
问题是“MyDaoAuthenticationProvider”组件未加载到 Spring 上下文中。所以我不能在这个类中注入或自动装配任何组件:
这是 AuthenticationHandler 类:
如果我将 @Component 放在 MyDaoAuthenticationProvider 类上,并在 SecurityConfig 类中添加 @Autowired 注释:
应用程序在开始时崩溃并出现此错误:
我必须做些什么来解决这个问题?谢谢。
编辑
解决方案
感谢 OrangeDog,我解决了这个实现的问题:
使用此配置,bean 已正确初始化,并且不再出现错误“java.lang.IllegalArgumentException: A UserDetailsService must be set”。
此外,bean 被加载到 Spring 上下文中,因此 DaoAuthenticationProvider 中的所有注入组件都被正确解析。
spring - 为什么 Spring Security 不允许对“anonymousUser”进行身份验证?
这是我在 Spring 日志中的消息:
考虑org.springframework.security.access.intercept.AbstractSecurityInterceptor.class的“authenticateIfRequired()”方法的实现:
这种情况的结果是'anonymousUser' 从未经过身份验证。
我从未在 Spring 日志中看到“anonymousUser”的跟踪“Successfully Authenticated:” 。
此外,SecurityContextHolder不会包含任何 Authentication对象,因为这行代码从未执行过:
事实上,如果我执行 SecurityContextHolder.getContext().getAuthentication(),我有一个空对象作为返回。
此行为与文档中的内容不匹配:
http://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/#anonymous-overview
这就是我们所说的匿名身份验证。请注意,“匿名身份验证”的用户和未经身份验证的用户之间在概念上没有真正的区别。Spring Security 的匿名身份验证只是为您提供了一种更方便的方式来配置访问控制属性。例如,对 servlet API 调用(例如 getCallerPrincipal)的调用仍将返回 null,即使 SecurityContextHolder 中实际上存在匿名身份验证对象。
在其他情况下匿名身份验证很有用,例如当审计拦截器查询 SecurityContextHolder 以确定哪个主体负责给定操作时。如果类知道SecurityContextHolder 始终包含一个 Authentication 对象,并且从不为 null ,则可以更健壮地编写类。
为什么会有这种行为?就我而言,Authentication 对象永远不会为空是不正确的。
这是我的 Java 配置:
任何想法?谢谢!
编辑
这是调用“authenticateIfRequired()”方法的完整堆栈:
这是我目前的实现:
当我需要当前用户的信息时,会在 @MappedSuperclass 中调用 SecurityContextHolder.getContext().getAuthentication()。