我在 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。userDetailsService 为空。但是 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>