对不起我的英语不好。JSF 与 Spring Security 集成的问题。
我做了什么:
- 在实体
User
实现的接口中UserDetails
- 接口
UserDAO
扩展接口UserDetailsService
UserHibernateDAO
实现的接口UserDAO
在 LoginMB 中如果添加方法
login()
:public void login() { UserDetails user = getDao().loadUserByUsername("admin2@admin.ru"); password= user.getPassword(); }
然后按预期显示密码,即步骤 1-3 正在工作。
在 applicationContext-security.xml 我要添加:
<beans:bean id="UserDAO" class="com.otv.model.dao.hibernate.UserHibernateDAO" /> <authentication-manager alias="authenticationManager"> <authentication-provider user-service-ref="UserDAO" /> </authentication-manager>
在登录MB中:
public class LoginMB implements Serializable { private static final long serialVersionUID = 1L; @Qualifier("authenticationManager") AuthenticationManager authenticationManager; private String userName; private String password; public String login() { UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken("admin2@admin.ru", "2"); // next line is 54 Authentication authenticate = authenticationManager.authenticate(token); if (authenticate.isAuthenticated()) { SecurityContextHolder.getContext().setAuthentication(authenticate); } return "success"; } //get and set metods }
它打印错误:
javax.faces.FacesException: #{loginMB.login}: java.lang.NullPointerException
...
java.lang.NullPointerException
at com.otv.managed.bean.LoginMB.login(LoginMB.java:54)
我怎么想,在 LoginMB 中不起作用@Qualifier
注释:
@Qualifier("authenticationManager")
AuthenticationManager authenticationManager;
请告诉我如何在另一个链接 authenticationManager 上?