Java SpringSecurity Autowire解决方案
显然有很好的文件证明@Autowired在userdetails服务中不起作用 这是真的吗?如果没有,如何在UserDetails服务中自动连线 如果这是真的,有什么解决办法吗?如何执行hibernate查询 如果我将AccountService中绑定的accountDao放在应用程序上下文中并在任何其他类中使用它,那么它就可以正常工作。我在某个地方读到Autowire无法工作,因为UserDetailsService超出了spring绑定的范围?一个解决办法是用xml手动连接它。如果那是真的?这是怎么回事 会计服务: 安全上下文 Web.xmlJava SpringSecurity Autowire解决方案,java,spring,spring-mvc,Java,Spring,Spring Mvc,显然有很好的文件证明@Autowired在userdetails服务中不起作用 这是真的吗?如果没有,如何在UserDetails服务中自动连线 如果这是真的,有什么解决办法吗?如何执行hibernate查询 如果我将AccountService中绑定的accountDao放在应用程序上下文中并在任何其他类中使用它,那么它就可以正常工作。我在某个地方读到Autowire无法工作,因为UserDetailsService超出了spring绑定的范围?一个解决办法是用xml手动连接它。如果那是真的?
要手动连接bean,只需执行以下操作:
<bean id="customUserDetailsService"
class="com.groupdealclone.app.service.AccountService" >
<property name="accountDao" ref="accountDao" />
</bean>
要手动连接bean,只需执行以下操作:
<bean id="customUserDetailsService"
class="com.groupdealclone.app.service.AccountService" >
<property name="accountDao" ref="accountDao" />
</bean>
@Autowired在UserDetailsService实现中运行良好。一定是其他地方出了问题:注入的接口可能不在扫描包中,或者其他地方。@Autowired在UserDetailsService实现中工作正常。一定是其他地方出了问题:您的注入接口可能不在扫描包中,或者其他地方。尝试时会出现什么错误?基本上在AccountService中,accountDao为空。我自动连线的任何内容都是空的。如果我声明了新的AccountDao,那么其中的EntityManager是自动连接的,这是空的。如果您在自己的bean上下文中声明UserDetailsService实现,那么@autowired应该可以正常工作。你设置好了吗?你在哪里看到文档表明这不起作用?@Peter,userdetails服务与所有其他服务在同一个包中,没有一个服务存在此问题。唯一的区别是,所有其他服务的bean都在应用程序上下文中,其中as userdetails服务位于Spring上下文(也称为根上下文)中。我将尝试将扫描包移动到根级别。@Peter,成功了,将组件扫描行从servlet-context.xml处理到root-context.xml,并开始自动连接。尝试时会出现什么错误?基本上在AccountService中,accountDao为空。我自动连线的任何内容都是空的。如果我声明了新的AccountDao,那么其中的EntityManager是自动连接的,这是空的。如果您在自己的bean上下文中声明UserDetailsService实现,那么@autowired应该可以正常工作。你设置好了吗?你在哪里看到文档表明这不起作用?@Peter,userdetails服务与所有其他服务在同一个包中,没有一个服务存在此问题。唯一的区别是,所有其他服务的bean都在应用程序上下文中,其中as userdetails服务位于Spring上下文(也称为根上下文)中。我将尝试将扫描包移动到根级别。@Peter,成功了,完成了从servlet-context.xml到root-context.xml的组件扫描线,并自动连线开始工作。您可能会想,然而UserDetailsService与所有其他服务在同一个包中,并且工作正常。它们都会毫无问题地注入AccountDAO?谢谢Aaron,您说得对,我将组件扫描从servlet-context.xml复制到root-context.xml,效果很好。不过,我不知道这是否是正确的实现。您可能会想,但是UserDetailsService与所有其他服务在同一个包中,它们工作正常。它们都注入AccountDAO,没有问题吗?谢谢Aaron,您说得有点对,我将组件扫描从servlet-context.xml复制到root-context.xml,它工作正常。但不知道这是否是正确的实现。谢谢Beny23。我成功地连接了AccountDAOBean,它工作得很好,但是在accountDao@PersistenceContext EntityManager em中;仍然为空。我将hibernate配置从应用程序上下文移动到spring上下文,一切正常。你知道这是不是正确的方法吗?如果我正确理解你的设置,你有一个单独的安全上下文和你的应用程序,这意味着他们不能看到彼此的bean。您是否需要在应用程序上下文中使用accountDao?谢谢Beny23。我成功地连接了AccountDAOBean,它工作得很好,但是在accountDao@PersistenceContext EntityManager em中;仍然为空。我将hibernate配置从应用程序上下文移动到spring上下文,一切正常。你知道这是不是正确的方法吗?如果我正确理解你的设置,你有一个单独的安全上下文和你的应用程序,这意味着他们不能看到彼此的bean。您是否需要在应用程序上下文中使用accountDao?
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring/root-context.xml
/WEB-INF/spring/security-context.xml
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!--
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
-->
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>
org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter
</filter-class>
</filter>
<welcome-file-list>
<welcome-file>
index.jsp
</welcome-file>
</welcome-file-list>
</web-app>
<bean id="customUserDetailsService"
class="com.groupdealclone.app.service.AccountService" >
<property name="accountDao" ref="accountDao" />
</bean>