私は 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 が null です。ただし、authenticationManager と rememberMeServices は null ではありません。
私の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>