Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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 Security 3.0.3和自定义身份验证处理过滤器_Java_Spring_Jakarta Ee_Spring Security - Fatal编程技术网

Java Spring Security 3.0.3和自定义身份验证处理过滤器

Java Spring Security 3.0.3和自定义身份验证处理过滤器,java,spring,jakarta-ee,spring-security,Java,Spring,Jakarta Ee,Spring Security,我使用SpringSecurity3.0.3.0版本。我想创建一个自定义身份验证处理筛选器 我创建了如下过滤器: // imports ommited public class myFilter extends AbstractAuthenticationProcessingFilter { @Override public Authentication attemptAuthentication(HttpServletRequest request, HttpServletRe

我使用SpringSecurity3.0.3.0版本。我想创建一个自定义身份验证处理筛选器

我创建了如下过滤器:

// imports ommited
public class myFilter extends AbstractAuthenticationProcessingFilter {
    @Override
    public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException, IOException, ServletException {
        // some code here
    }
}
我用以下方式配置我的
security.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns:beans="http://www.springframework.org/schema/beans"
         xsi:schemaLocation="
         http://www.springframework.org/schema/beans
         http://www.springframework.org/schema/beans/spring-beans.xsd
         http://www.springframework.org/schema/security
         http://www.springframework.org/schema/security/spring-security-3.0.xsd">

    <http auto-config="true">
        <!--<session-management session-fixation-protection="none"/>-->
        <custom-filter ref="ipFilter" before="FORM_LOGIN_FILTER"/>
        <intercept-url pattern="/login.jsp*" filters="none"/>
        <intercept-url pattern="/**" access="ROLE_USER"/>
        <form-login login-page="/login.jsp" always-use-default-target="true"/>
        <logout logout-url="/logout" logout-success-url="/login.jsp" invalidate-session="true"/>
    </http>

    <beans:bean id="ipFilter" class="myFilter">
        <beans:property name="authenticationManager" ref="authenticationManager"/>
    </beans:bean>

    <authentication-manager alias="authenticationManager" />
</beans:beans>

似乎一切都正常,但当我尝试访问受保护的页面而不是
myFilter.attemptAuthentication
时,调用了
myFilter.doFilter


知道为什么吗?

当然servlet容器调用
MyFilter.doFilter
——毕竟,这是进入过滤器的关键

在您的特定情况下,servlet容器应该调用
doFilter()
on,而不是
MyFilter

AbstractAuthenticationProcessingFilter.doFilter()
依次负责调用
MyFilter.attemptAuthentication()

如果不是这样,可能您在
MyFilter
中重写了
doFilter()
?如果是,最好将其删除(或者至少调用
super.doFilter()
)。有关更多详细信息,请参阅的JavaDocs

编辑:MinimeDJ澄清说,一切都是我上面建议的。在这种情况下,我建议检查
filterprocesseurl
属性的值。从:

如果请求URL与FilterProcessURL属性的值匹配,此筛选器将拦截请求并尝试从该请求执行身份验证。可以通过重写方法RequireAuthentication来修改此行为

因此,您可以:

  • 设置适当的
    filterProcessURL
    值(通常类似于
    /j\u spring\u security\u check
  • 或者,您可以重写
    requireAuthentication
    方法以始终返回
    true

如果您仍然有问题,那么我建议您使用调试器并逐步检查spring安全性(以及您的)代码,以查看问题的确切发生位置。

您好,我是MyFilter。代码中的所有内容都如您所建议的,但不知何故,没有调用attemptAuthentication。。。还有什么要检查的吗?在回答中添加了一些建议。好的,我设法使每件事都顺利进行。我必须通过bean配置删除标准配置和配置spring安全性。非常感谢。