我使用kerberos进行身份验证,使用ldap进行授权。 我的kerberos身份验证工作正常。我面临的问题是在kerberos返回用户名之前调用ldap。 我的ldap代码在一个拦截器内部,它首先被调用,但它将request.getRemotUser()作为null,并且kerberos在此之后返回用户名,正如我在日志中看到的那样。 那么如何首先调用kerberos然后再调用ldap? 我的ldap代码是在Interceptor类中的Spring HandlerInterceptorAdaptor的preHandlerMethod内部:
@override
public boolean preHandler(HttpServletRequest request,HttpServletResponse response,Object handler){
String userName = request.getRemoteUser();
...
if (isAuthorized(userName)) {
//setting userName in session here
}
else {
//ldap authentication failed
}
}
拦截器在application-servlet.xml中定义,kerberos在security-config.xml中配置,两个条目都在web.xml中创建。 security-config.xml位于web.xml中的application-servlet.xml之前 所以在上面的代码中,我得到的用户名为null,但在日志中调用kerberos时,它返回我的用户名。很抱歉没有发布详细代码。我希望这个问题是可以理解的。
答案 0 :(得分:0)
也许我不太明白你试图解决的问题/问题,但为什么不注入LdapUserDetailsServiceImpl,作为KerberosServiceAuthenticationProvider的UserDetailsService?
这样Kerberos正在进行身份验证并对Ldap进行授权(即填充LdapUserDetails对象)。