【问题标题】:UserDetailsService Not Getting Called未调用 UserDetailsS​​ervice
【发布时间】:2012-07-07 21:14:03
【问题描述】:

我有这个 Spring XML:

    <!-- Configure the authentication  -->
    <security:http auto-config="true" use-expressions="true">
        <security:form-login login-page="/login"
                             authentication-failure-url="/login?error=true"
                             default-target-url="/index" />

        <security:logout invalidate-session="true"
                         logout-success-url="/login"
                         logout-url="/logout" />
    </security:http>

    <security:authentication-manager>
        <security:authentication-provider user-service-ref="testUDS" />
    </security:authentication-manager>

    <bean id="testUDS" class="net.safecycle.services.security.TestUserDetailService" />

我的 UserDetailsS​​ervice 实现如下所示:

public class TestUserDetailService implements UserDetailsService {
    public UserDetails loadUserByUsername 
    (
        String username
    ) throws UsernameNotFoundException {
        System.out.println ("loadUserByUsername (" + username + ")");

        Collection<GrantedAuthority> authorities;
        authorities = new LinkedList<GrantedAuthority> ();
        authorities.add (new GrantedAuthorityImpl ("Admin"));

        UserDetails ud = new User (username, 
                                   "ca", 
                                   true, 
                                   true, 
                                   true, 
                                   true, 
                                   authorities);
        return ud;
    }
}

当我使用任何用户名和密码“ca”登录时,我应该会在loadUserByUsername 的顶部看到打印语句,但我没有。最令人困惑的是,我在另一个项目中使用过这段代码没有问题。有什么我遗漏的,我希望是复制错误吗?

【问题讨论】:

    标签: java spring spring-mvc spring-security


    【解决方案1】:

    这是我的 xml 文件中的代码。唯一缺少的是别名。尝试添加 alias="authenticationManager" 也许会有所帮助。

    <beans:bean id="CustomUserDetailsService"
        class="com.dennis.ehospital.hibernate.security.CustomUserDetailsService" />
    
    <authentication-manager alias="authenticationManager">
        <authentication-provider user-service-ref="CustomUserDetailsService" />
    </authentication-manager>
    

    【讨论】:

      【解决方案2】:

      尝试指定哪些资源受到保护

      <security:intercept-url pattern="/**" access="isAuthenticated()"/>
      

      【讨论】:

      • 这让我进入了重定向循环。我也试过pattern="/**" access="permitAll",结果和我原来的问题一样。
      • @Nik 启用日志记录以找出问题,如果您有 log4j.properties,请添加 log4j.logger.org.springframework.security=DEBUG
      • 问题最终出在我的登录代码中的 HTML 表单上。由于您的日志记录建议,它被弄清楚了。非常感谢。
      • @Nik 你发现了什么 HTML 表单问题可以告诉我吗,因为我也有同样的问题?
      • 这是4年前的,我不记得了,对不起。
      猜你喜欢
      • 2019-06-01
      • 2020-01-03
      • 2013-06-16
      • 2016-03-09
      • 1970-01-01
      • 2012-06-11
      • 2011-05-02
      • 1970-01-01
      • 2011-09-17
      相关资源
      最近更新 更多