【问题标题】:Integration of JSF with Spring SecurityJSF 与 Spring Security 的集成
【发布时间】:2013-09-23 14:30:24
【问题描述】:

对不起我的英语。 JSF 与 Spring Security 集成的问题。

我做了什么:

  1. 在实体User实现接口UserDetails
  2. 接口UserDAO扩展接口UserDetailsService
  3. UserHibernateDAO实现接口UserDAO

    在 LoginMB 中如果要添加方法login():

    public void login() {
            UserDetails user = getDao().loadUserByUsername("admin2@admin.ru");
            password= user.getPassword();
    } 
    

    然后按预期显示密码,即步骤 1-3 正在工作。

  4. 在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>
    
  5. 在登录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 上?

【问题讨论】:

  • 请更新问题以仅显示问题。将 问题已解决 部分移到答案中,然后等待两天接受。

标签: hibernate jsf spring-security


【解决方案1】:

来自 applicationContext-security.xml 不起作用@ManagedProperty。为什么?

  1. 在 LoginMB 中我添加了:

    @ManagedProperty(value="#{authenticationManager}")
    AuthenticationManager authenticationManager;
    
  2. 在 applicationContext.xml 我添加了:

    <sec:http auto-config="true">
    
        <sec:form-login login-page="/pages/login.html" authentication-failure-url="/fail.html" />
        <sec:intercept-url pattern="/pages/service/*" access="ROLE_SHIPPER" />
        <sec:intercept-url pattern="/pages/task/*" access="ROLE_CARRIER" />
    
    </sec:http>
    
    <sec:authentication-manager alias="authenticationManager">
        <sec:authentication-provider user-service-ref="UserDAO">
            <sec:password-encoder hash="plaintext" />
        </sec:authentication-provider>
    </sec:authentication-manager>
    

它正在工作!

【讨论】:

    猜你喜欢
    • 2012-08-12
    • 2022-01-20
    • 2015-06-29
    • 1970-01-01
    • 2011-12-26
    • 2015-11-13
    • 2012-01-20
    • 1970-01-01
    • 2011-02-18
    相关资源
    最近更新 更多