0

我在 LoginBean.java 中有以下内容

@ManagedBean(name = "loginMgmtBean")
@RequestScoped
public class LoginBean {
.....
@ManagedProperty(value = "#{authenticationManager}")
private AuthenticationManager authenticationManager;
@ManagedProperty(value = "#{rememberMeServices}")
private RememberMeServices rememberMeServices;
@ManagedProperty(value = "#{userDetailsService}")
private UserDetailsService userDetailsService;
.....

在 context.xml 中

<bean id="loginBean" name="loginBean" class="com.merc.jsf.springsecurity.LoginBean" scope="prototype">
    <property   name="authenticationManager"    ref="authenticationManager"></property>
    <property   name="rememberMeServices"       ref="rememberMeServices"></property>
    <property   name="userDetailsService"       ref="customjdbcUserService"></property>
</bean>

<bean id="customjdbcUserService" class="com.merc.jsf.springsecurity.CustomJDBCDaoImpl">
    <property name="dataSource"         ref="dataSource"/>
    <property name="enableAuthorities"  value="true"/>
    <property name="usersByUsernameQuery">
        <value>SELECT USERNAME, PASSWORD, ENABLED FROM USERS WHERE USERNAME = ?</value>
    </property>
    <property name="authoritiesByUsernameQuery">
        <value>
            select U.USERNAME, UR.ROLE_NAME from USER_ROLES UR, USERS U WHERE U.ID = UR.USER_ID AND U.USERNAME = ?
        </value>
    </property>
</bean>

为了记住我的功能,我在 login() 方法中执行以下操作。

UserDetails userDetails = userDetailsService.loadUserByUsername(getUserName());

这给了我一个NPE。userDetailsS​​ervice 为空。但是 authenticationManager 和 rememberMeServices 不为空。

我的 faces-config.xml 有以下内容

<navigation-rule>
    <display-name>pages/common/login.xhtml</display-name>
    <from-view-id>/pages/common/login.xhtml</from-view-id>
    <navigation-case>
        <from-action>#{loginMgmtBean.login}</from-action>
        <from-outcome>Secured</from-outcome>
        <to-view-id>/pages/secure/secured.xhtml</to-view-id>
    </navigation-case>
</navigation-rule>
4

0 回答 0