如何在spring security中编写自定义筛选器?
我希望每个请求都能收到一些信息,因此我认为与其为每个请求提供一个函数并分别从请求中获取这些信息,不如提供一个过滤器。如何在spring security中编写自定义筛选器?,spring,filter,spring-security,Spring,Filter,Spring Security,我希望每个请求都能收到一些信息,因此我认为与其为每个请求提供一个函数并分别从请求中获取这些信息,不如提供一个过滤器。 因此,每个请求都将通过该过滤器,我将获得我想要的。 问题是:如何编写自定义筛选器? 假设它不像任何预定义的spring安全过滤器,它是全新的。您可以使用标准Java过滤器。只需将它放在web.xml中的身份验证过滤器之后(这意味着它将稍后进入过滤器链,并将在安全过滤器链之后调用) 只是把这个混在一起;在http元素中使用自定义过滤器如何: <security:http a
因此,每个请求都将通过该过滤器,我将获得我想要的。
问题是:如何编写自定义筛选器?
假设它不像任何预定义的spring安全过滤器,它是全新的。您可以使用标准Java过滤器。只需将它放在web.xml中的身份验证过滤器之后(这意味着它将稍后进入过滤器链,并将在安全过滤器链之后调用)
只是把这个混在一起;在
http
元素中使用自定义过滤器如何:
<security:http auto-config="false" ...>
...
<security:custom-filter position="FORM_LOGIN_FILTER" ref="MyCustomFilter" />
</security:http>
...
在等待答案时,我想出了一个解决方案。我在安全过滤器的末尾添加了我的过滤器(extendedGenericFilterBean
)。它工作得很好。但是现在,正如我看到你的答案,我觉得这听起来更好。我正在尝试你的解决办法。希望它也能起作用。我会告诉你结果的。谢谢。一般来说你的答案是正确的,但我不得不修改一下。谢谢你的帮助。修改我的unswer,我将接受您的更改。知道我错在哪里对我来说是很有趣的。你没有错。你的回答是正确的。我想把我的解决方案(和你的非常相似)包含在这里,以便以后使用。是的,你的解决方案也很好。但是在这种情况下,我们需要定义所有的过滤器(即使是默认的),如果我们遗漏了一个过滤器,那么它将不会被调用。我说得对吗?这是目前为止最好的解决办法。我想先运行我自己的过滤器,然后再做其他事情:我可以在中添加模式吗
<!-- The Spring Security Filter Chain -->
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- Your filter definition -->
<filter>
<filter-name>customFilter</filter-name>
<filter-class>com.yourcompany.test.CustomFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>customFilter</filter-name>
<url-pattern>/VacationsManager.jsp</url-pattern>
</filter-mapping>
<security:filter-chain-map>
<sec:filter-chain pattern="/**"
filters="
ConcurrentSessionFilterAdmin,
securityContextPersistenceFilter,
logoutFilterAdmin,
usernamePasswordAuthenticationFilterAdmin,
basicAuthenticationFilterAdmin,
requestCacheAwareFilter,
securityContextHolderAwareRequestFilter,
anonymousAuthenticationFilter,
sessionManagementFilterAdmin,
exceptionTranslationFilter,
filterSecurityInterceptorAdmin,
MonitoringFilter"/> <!-- Your Filter at the End -->
</security:filter-chain-map>
public class MonitoringFilter extends GenericFilterBean{
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
//Implement this Function to have your filter working
}
<security:http auto-config="false" ...>
...
<security:custom-filter position="FORM_LOGIN_FILTER" ref="MyCustomFilter" />
</security:http>