java的重定向循环,使用Filter后,出现重定向循环有关问题,求高手帮忙看下

使用Filter后,出现重定向循环问题,求高手帮忙看下

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

HttpServletRequest req=(HttpServletRequest)request;

HttpServletResponse res=(HttpServletResponse)response;

HttpSession session=req.getSession();

//判断用户是否登陆,如果没有登陆,就跳到login.jsp页面!!!过滤的时候就出现了重定向循环,我清了cookie,换了ie和chrome都是这个情况,求高手看看是程序哪错了

if(session.getAttribute("user")==null){

res.sendRedirect("login.jsp");

return;

}

// pass the request along the filter chain

chain.doFilter(request, response);

}

------解决思路----------------------

问题在于第一次登录进来时,你的用户信息还没有进session呢,就被filter给过滤回去了。

过滤器过滤的时候,要避开登录的url。

给其他的应用url进行过滤,登录的url就不要通过过滤器了否则就陷入现在这种死循环了。

------解决思路----------------------

参考这个

/**

* 处理字符集及用户登陆验证

* @author rick

*/

public class LesFilter implements Filter {

//字符集编码

private String encoding = "UTF-8";

/**

* 未登陆前过滤的路径地址

*/

private String[] urlPatterns = {

"/actions/*",

"/FCL/*",

"/vp/*",

"/vdm/*",

"/print/*",

"/system/*",

"/modules/*",

"/index.jsp"

};

public void init(FilterConfig filterConfig) throws ServletException {

encoding = filterConfig.getInitParameter("encoding");

}

public void doFilter(ServletRequest req, ServletResponse rep, FilterChain filterChain) throws IOException, ServletException {

HttpServletResponse response = (HttpServletResponse) rep;

HttpServletRequest request = (HttpServletRequest) req;

request.setCharacterEncoding(encoding);

//

String actions = ActionUtil.getString(request, "actions");

String location = request.getRequestURI().replace(request.getContextPath(), "");

boolean gotoAuth = false;

//

for (int i = 0; i 

String urlPattern = urlPatterns[i];

urlPattern = urlPattern.replace("*", "[\\w\\d\\/\\.]+");

Pattern pattern = Pattern.compile(urlPattern);

Matcher matcher = pattern.matcher(location);

if(matcher.find()){

gotoAuth = true;

break;

}

}

if(gotoAuth && !"login".equals(actions)){

Object loginer = request.getSession().getAttribute("loginer");

response.setHeader("auth", loginer == null ? "failed" : "success");

response.setHeader("site", request.getContextPath());

if(loginer == null){

String path = request.getContextPath() + "/login.jsp";

response.sendRedirect(path);

}else{

filterChain.doFilter(request, response);

}

}else{

filterChain.doFilter(request, response);

}

}

public void destroy() {

}

}

------解决思路----------------------

if(session.getAttribute("user")==null && !rqeust.getRequestURI().contains("login.jsp")){

res.sendRedirect("login.jsp");

return;

}

------解决思路----------------------

其实是你自己忽略了登陆这个url。

这么说吧,因为的这个过滤器是过滤所有的请求吧,只有没有也就是session中没有username就跳到login页面。

而你跳到login页面的时候也是会发一个请求,而这个请求又被这个过滤器给拦截一遍,而此时显然是session中没有值的,所以又会跳到login,这样就一直循环了了,所以你要在配置这个过滤器的时候除掉登陆,等相关的url。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值