Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring安全认证管理器赢得';不要在自定义过滤器上拾取_Java_Spring_Spring Security - Fatal编程技术网

Java Spring安全认证管理器赢得';不要在自定义过滤器上拾取

Java Spring安全认证管理器赢得';不要在自定义过滤器上拾取,java,spring,spring-security,Java,Spring,Spring Security,我试图创建一个自定义过滤器来处理身份验证,因为我被迫使用AD和本地数据库(arg!)的组合来确定访问权限。我用的是官方文件,主要是针对这个问题 然而,当我运行我的服务器时,它抱怨AuthenticationManager为空,而我相信我是在用XML设置它。我错过了什么 例外情况: SEVERE: Context initialization failed org.springframework.beans.factory.BeanCreationException: Error creating

我试图创建一个自定义过滤器来处理身份验证,因为我被迫使用AD和本地数据库(arg!)的组合来确定访问权限。我用的是官方文件,主要是针对这个问题

然而,当我运行我的服务器时,它抱怨AuthenticationManager为空,而我相信我是在用XML设置它。我错过了什么

例外情况:

SEVERE: Context initialization failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'myUsernamePasswordAuthenticationFilter' defined in file [*snip*]:
Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: authenticationManager must be specified
...
Caused by: java.lang.IllegalArgumentException: authenticationManager must be specified
at org.springframework.util.Assert.notNull(Assert.java:112)
@Component
public class MyUsernamePasswordAuthenticationFilter extends AbstractAuthenticationProcessingFilter {
public AdminUsernamePasswordAuthenticationFilter() {
    super("/login");
}

@Override
public Authentication attemptAuthentication(final HttpServletRequest request,
        final HttpServletResponse response) throws AuthenticationException {
    // stuff and:
    return getAuthenticationManager().authenticate(new UsernamePasswordAuthenticationToken(
            login, request.getParameter("password")));
}
}
@Component
public class MyAuthenticationProvider implements AuthenticationProvider {
@Override
public Authentication authenticate(final Authentication authentication) throws AuthenticationException {
    // all the funky AD+DB code
    return null;
}

@Override
public boolean supports(final Class<?> clazz) {
    return true;
}
}
XML:(带有一些简化的类名)

身份验证提供程序:

SEVERE: Context initialization failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'myUsernamePasswordAuthenticationFilter' defined in file [*snip*]:
Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: authenticationManager must be specified
...
Caused by: java.lang.IllegalArgumentException: authenticationManager must be specified
at org.springframework.util.Assert.notNull(Assert.java:112)
@Component
public class MyUsernamePasswordAuthenticationFilter extends AbstractAuthenticationProcessingFilter {
public AdminUsernamePasswordAuthenticationFilter() {
    super("/login");
}

@Override
public Authentication attemptAuthentication(final HttpServletRequest request,
        final HttpServletResponse response) throws AuthenticationException {
    // stuff and:
    return getAuthenticationManager().authenticate(new UsernamePasswordAuthenticationToken(
            login, request.getParameter("password")));
}
}
@Component
public class MyAuthenticationProvider implements AuthenticationProvider {
@Override
public Authentication authenticate(final Authentication authentication) throws AuthenticationException {
    // all the funky AD+DB code
    return null;
}

@Override
public boolean supports(final Class<?> clazz) {
    return true;
}
}
@组件
公共类MyAuthenticationProvider实现AuthenticationProvider{
@凌驾
公共身份验证(最终身份验证)引发AuthenticationException{
//所有时髦的AD+DB代码
返回null;
}
@凌驾
公共布尔支持(最终类clazz){
返回true;
}
}
我正在运行Java6,它是最新的Spring安全性(3.1.4.RELEASE)和Spring(3.2.3.RELEASE)版本,运行在TomcatV6服务器上。不同的Spring版本似乎不是问题()。如果这是一个问题,如果你想使用Spring安全性,就必须运行Spring 3.1.4,这很简单

我还做了一些其他事情,但没有成功:

  • 如前所述,我试图抛弃
    ,转而使用普通bean
  • 我尝试以各种组合添加bean id、名称、身份验证管理器引用

  • 啊。。。我发现了许多人在春天犯下的基本错误。您已经在XML中定义了bean
    MyUsernamePasswordAuthenticationFilter
    ,这是正确的。然而,您也可以通过
    @Component
    注释对其进行注释,这意味着组件扫描将其拾取并注册为另一个bean定义。从这个定义提交的bean实例实际上不会初始化其
    authenticationManager
    依赖项


    只需删除
    MyUsernamePasswordAuthenticationFilter
    中的
    @组件
    注释,您就可以了。

    是的,就是这样。非常感谢。我真不敢相信我错过了这样的机会。我希望你不要对着墙大喊大叫和挥手太久。