Filter怎么利用http请求实现绕过?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
http请求绕过Filter的实例
场景:两个web服务器,A当做服务端,B为客户端,B通过Hessian远程访问A。A上加了session过期filter,通过用户信息检查session是否过期。这种情况下,Hessian会先发给filter,filter读不到用户信息就会认为过期了,引起错误。
解决方案:让hessian请求绕过session过期filter。
filter配置中,不能加exclusion,所以需要用初始化参数给出不过滤的请求。本例中不过滤的格式为>/SarService。
<!--session过期filter -->
<filter>
<init-param>
<param-name>exclusions</param-name>
<param-value>/SarService</param-value>
</init-param>
<filter-name>loginFilter</filter-name>
<filter-class>org.sigsit.vinca.sar.filter.LoginFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>loginFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Filter类中,在init中读取exclusions,并在doFilter中判断。如下:
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// 由于 session 属于 HTTP 范畴,故需要向下转型成 HttpServletRequest 类型
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res=(HttpServletResponse)response;
HttpSession session = req.getSession(); // 取得 session
String username = (String) session.getAttribute("username");
StringBuffer fileURL = req.getRequestURL();
if(fileURL.indexOf(this.exclusions)!=-1){
chain.doFilter(request, response);
}
else{
//原来的处理代码
}
}
public void init(FilterConfig config) throws ServletException {
// TODO Auto-generated method stub
this.exclusions=config.getInitParameter("exclusions");
}
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。