Java SpringSecurity Autowire解决方案

Java SpringSecurity Autowire解决方案,java,spring,spring-mvc,Java,Spring,Spring Mvc,显然有很好的文件证明@Autowired在userdetails服务中不起作用 这是真的吗?如果没有,如何在UserDetails服务中自动连线 如果这是真的,有什么解决办法吗?如何执行hibernate查询 如果我将AccountService中绑定的accountDao放在应用程序上下文中并在任何其他类中使用它,那么它就可以正常工作。我在某个地方读到Autowire无法工作,因为UserDetailsService超出了spring绑定的范围?一个解决办法是用xml手动连接它。如果那是真的?

显然有很好的文件证明@Autowired在userdetails服务中不起作用

这是真的吗?如果没有,如何在UserDetails服务中自动连线

如果这是真的,有什么解决办法吗?如何执行hibernate查询

如果我将AccountService中绑定的accountDao放在应用程序上下文中并在任何其他类中使用它,那么它就可以正常工作。我在某个地方读到Autowire无法工作,因为UserDetailsService超出了spring绑定的范围?一个解决办法是用xml手动连接它。如果那是真的?这是怎么回事

会计服务:

安全上下文

Web.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>