gpt4 book ai didi

java - Spring Security 3.0.2 x Spring 3.0.1 的错误 - 未创建代理

转载 作者:行者123 更新时间:2023-12-02 00:52:32 24 4
gpt4 key购买 nike

friend 们,

我花了几天时间在互联网上搜索有关我的问题的答案,但没有找到任何可以真正解决问题的方法。我尝试了几种不同的配置,但仍然无济于事。

这是我的问题:

我有一个应用程序工作正常,直到我决定添加 Spring Security。引入此组件后,我在启动 tomcat 6.0.24 时收到这些消息:


INFO: Bean 'org.springframework.aop.support.DefaultBeanFactoryPointcutAdvisor#0' is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
Mar 10, 2010 3:46:47 PM org.springframework.context.support.AbstractApplicationContext$BeanPostProcessorChecker postProcessAfterInitialization
INFO: Bean 'org.springframework.security.access.method.DelegatingMethodSecurityMetadataSource#0' is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
Mar 10, 2010 3:46:47 PM org.springframework.context.support.AbstractApplicationContext$BeanPostProcessorChecker postProcessAfterInitialization
INFO: Bean 'org.springframework.security.methodSecurityMetadataSourceAdvisor' is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
Mar 10, 2010 3:46:48 PM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons

我没有得到。因此,现在所有类都不再获取业务类的代理,而是获取不提交事务的 POJO。我使用了 @PersistenceContext 注释并注入(inject)了 EntityManager,但是在 Spring Security 出现之后,我不断收到 NPE(EntityManager 不再被注入(inject))。因此,我尝试扩展 JpaDaoSupport 并以不同的方式访问 EntityManager,如下所示:


getJpaTemplate()
.execute(new JpaCallback() {
public Object doInJpa(final EntityManager em)
throws PersistenceException {
// Here, I get an EntityManager...
}
});

它有效,因为现在我不再得到任何 NPE。但它仍然不是代理。

如果我注释掉 app-security.xml 文件并且不加载其 bean,则应用程序可以正常工作。如果我这样做,则不会创建代理,并且应用程序不会提交任何事务。

我的 app-security.xml 文件是:


[?xml version="1.0" encoding="UTF-8"?]
[beans xmlns="http://www.springframework.org/schema/beans"
xmlns:security="http://www.springframework.org/schema/security"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd"
]

[bean id="interfaceDecisionManagerBean" class="com.mot.br.jag.security.InterfaceDecisionManager" /]

[security:global-method-security
access-decision-manager-ref="interfaceDecisionManagerBean"
/]

[security:http auto-config="false" access-decision-manager-ref="interfaceDecisionManagerBean"]
[security:form-login login-page="/login.html"
login-processing-url="/loginProcess"
default-target-url="/index.jsp"
authentication-failure-url="/login.html?login_error=1" /]

[security:anonymous /]
[security:logout logout-url="/logout" logout-success-url="/logoutSuccess.html" /]

[security:port-mappings]
[security:port-mapping http="8080" https="8443"/]
[/security:port-mappings]
[/security:http]

[security:ldap-server
id="motoLDAP"
url="[private... ]"
/]

[security:authentication-manager]
[security:ldap-authentication-provider
server-ref="motoLDAP"
user-search-filter="(uid={0})"
user-search-base="ou=intranet"
/]

[/security:authentication-manager]

[bean id="contextSource" class="org.springframework.security.ldap.DefaultSpringSecurityContextSource"]
[constructor-arg value="[... private ...]"/]
[/bean]

[bean id="userSearch" class="org.springframework.security.ldap.search.FilterBasedLdapUserSearch"]
[constructor-arg index="0" value="ou=intranet"/]
[constructor-arg index="1" value="(uid={0})"/]
[constructor-arg index="2" ref="contextSource" /]
[/bean]

[bean id="ldapAuthentication" class="com.mot.br.jag.security.authentication.LDAPAuthentication"]
[constructor-arg index="0"]
[bean id="ldapProvider" class="org.springframework.security.ldap.authentication.LdapAuthenticationProvider"]
[constructor-arg]
[bean class="org.springframework.security.ldap.authentication.BindAuthenticator"]
[constructor-arg ref="contextSource" /]
[property name="userSearch" ref="userSearch" /]
[/bean]
[/constructor-arg]
[/bean]
[/constructor-arg]

[constructor-arg index="1" ref="userSearch" /]
[/bean]

[/beans]

我的 app-persistence.xml 是:


[?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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:jee="http://www.springframework.org/schema/jee"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd"]

[bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" /]
[bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" /]
[bean class="org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator" /]

[!-- ENTITY MANAGERS --]

[bean id="interfaceEMF"
class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean"]
[property name="persistenceUnitName" value="interfaceDS" /]
[/bean]

[!-- TRANSACTION MANAGERS --]

[bean id="interfaceTM" class="org.springframework.orm.jpa.JpaTransactionManager"]
[property name="entityManagerFactory" ref="interfaceEMF" /]
[/bean]

[!-- TX ADVICES --]

[tx:advice id="txAdvice" transaction-manager="interfaceTM"]
[tx:attributes]
[tx:method name="*" propagation="REQUIRED" rollback-for="Throwable" /]
[/tx:attributes]
[/tx:advice]

[!-- AOP CONFIG --]

[aop:aspectj-autoproxy /]
[aop:config]
[aop:pointcut id="businessMethods" expression="execution(* com.mot.br.jag.business.Business+.*(..))" /]

[aop:advisor advice-ref="txAdvice" pointcut-ref="businessMethods" /]
[/aop:config]

[/beans]

我已经没有想法了...我读到这是一个由于 Bean 预处理顺序而发生的错误,但我也读到这个错误已经被修复。如果我没有清楚地表达自己的意思,我很抱歉,英语不是我的母语。如果它能引导我走向正确的方向,我很乐意回答任何问题。 :)

提前非常感谢您,罗德里戈

最佳答案

我不知道这里发生了什么,但我在 Roo 应用程序中遇到了类似的问题:在我配置安全性之前它运行良好。

我的问题是我有一个自定义的 AuthenticationManager,它使用 Roo 实体来查找用户及其角色,即执行身份验证和授权。

我在启动时遇到了类似的 @PersistenceContext 问题,它没有被注入(inject)。

我找到了问题和解决方案,也许对你有帮助......

如果 FilterSecurityInterceptor 的属性 validateConfigAttributes 设置为 true(这是其默认值),则它会尝试在其 afterPropertiesSet 方法中获取所有 ConfigAttribute's

在我的例子中,这意味着使用 Roo 实体的数据库选择需要他们没有的 @PersistenceContext。

为什么?

因为 Roo 在 web.xml 中这样配置了 contextConfigLocation:

    <context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:META-INF/spring/applicationContext*.xml</param-value>
</context-param>

因此,applicationContext-security.xml 是第一个选定的配置文件,位于包含持久性上下文配置的 applicationContext.xml 之前。

我认为如果您在启动期间不必访问持久性上下文,那么顺序并不重要。

但是如果发生这种情况,请尝试以下操作:

    <context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath*:META-INF/spring/applicationContext.xml
classpath*:META-INF/spring/applicationContext-security.xml
</param-value>
</context-param>

关于java - Spring Security 3.0.2 x Spring 3.0.1 的错误 - 未创建代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2419956/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com