我想设置一个推荐人cookie,因为我需要排除一些页面(例如错误、登录、注销等)要在登录后重定向到上次调用但未被排除的页面,请执行以下操作:
public class CookieReferrerFilter extends OncePerRequestFilter {
public static final String REFERRER_COOKIE_NAME = "REFERRER";
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
if (!isReferrerExcluded(request)) {
Cookie sessionCookie = new Cookie(REFERRER_COOKIE_NAME, request.getRequestURI());
sessionCookie.setPath(!"".equals(request.getContextPath()) ? request.getContextPath() : "/");
sessionCookie.setSecure(false);
sessionCookie.setMaxAge(-1);
response.addCookie(sessionCookie);
}
filterChain.doFilter(request, response);
}
private boolean isReferrerExcluded(HttpServletRequest request) {
for (String pattern : EXCLUDED_REFERRER) {
if (new AntPathRequestMatcher(pattern).matches(request)) {
return true;
}
}
return false;
}
}
但是Spring Security过滤链在CookiierReferrerFilter之前就被触发了。因此,调用安全页面将立即将我重定向到登录页面,而无需调用CookiierReferrFilter。doFilterInternal
之前,没有设置cookie。
有一个类配置WebApp(设置配置类、映射、过滤器),它扩展了AbstractAnnotationConfigDispatcherServletializer
:
public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[] { ApplicationContextConfig.class };
}
@Override
protected Class<?>[] getServletConfigClasses() {
return null;
}
@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}
@Override
protected Filter[] getServletFilters() {
CookieReferrerFilter cookieReferrerFilter = new CookieReferrerFilter();
CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
characterEncodingFilter.setEncoding("UTF-8");
characterEncodingFilter.setForceEncoding(true);
return new Filter[] { cookieReferrerFilter, characterEncodingFilter };
}
}
还有一个扩展了AbstractSecurityWebApplicationInitializer:
public class SecurityInitializer extends AbstractSecurityWebApplicationInitializer {
}
假设您使用的是基于Java的Spring Security配置,您只需让您的过滤器由Spring管理,并将其添加到Spring Security过滤器链的开头(从HttpSecurity javadoc中的示例中得到了很大启发(请参见下面的链接):
@Configuration
@EnableWebSecurity
public class HttpSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired CookieReferrerFilter cookieFilter;
@Autowired CharacterEncodingFilter encodingFilter;
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.addFilterBefore(cookieFilter, ChannelProcessingFilter.class)
.addFilterBefore(encodingFilter, ChannelProcessingFilter.class)
//your configuration follows here
;
}
}
有关详细信息,请参阅http://docs.spring.io/autorepo/docs/spring-security/current/apidocs/org/springframework/security/config/annotation/web/builders/HttpSecurity.html#addFilter(javax.servlet.过滤器)。
我将在一个已经存在的网站中介绍Spring Web Security。现在出现了一个问题: 我希望我的自定义筛选器在Spring Security筛选器链之前在Tomcat筛选器链中执行。我不想让他们成为这个Spring安全过滤器链的一部分。 我所找到的只是Spring Boot中的一个解决方案(请参见“Spring-How to insert a filter before SpringSecu
我已将过滤器配置如下,但在Spring Security Filter链之前不会调用它。我已将顺序设置为零 我使用的是Spring Boot 1.3,它支持在过滤器上设置顺序
主要内容:FilterChain 接口,Filter 链的拦截过程,Filter 链中 Filter 的执行顺序,示例在 Web 应用中,可以部署多个 Filter,若这些 Filter 都拦截同一目标资源,则它们就组成了一个 Filter 链(也称过滤器链)。过滤器链中的每个过滤器负责特定的操作和任务,客户端的请求在这些过滤器之间传递,直到传递给目标资源。 FilterChain 接口 javax.servlet 包中提供了一个 FilterChain 接口,该接口由容器实现。容器将其实例对象
本文向大家介绍详解angular ui-grid之过滤器设置,包括了详解angular ui-grid之过滤器设置的使用技巧和注意事项,需要的朋友参考一下 之前关于angular ui-grid过滤器设置,最近需要回顾,就顺便发到随笔上了 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
时间过滤器按照指定的时间段展示搜索结果。设置了 index contains time-based events 和 time-field 的索引模式可以使用时间过滤器。 时间过滤器默认的时间段为最近15分钟。您可以使用页面顶部的 Time Picker 来调整时间段和刷新频率。 通过 Time Picker 设置时间过滤器: 点击 Kibana 工具栏中的 Time Picker 。 可以通过点
问题内容: 我的应用程序中有2个过滤器。根据某些条件,我想选择是否执行第二个过滤器。有没有办法做到这一点? 我做了一些谷歌搜索,但没有成功。我希望请求继续执行而不执行第二个过滤器。那可能吗? 任何帮助将不胜感激。 问题答案: 您可以在请求中设置一个属性,然后在第二个过滤器中对其进行检查。 您可以像这样简化上面的代码: 这样,您只需检查属性“ executeSecondFilter”的存在