Filter中重定向问题

Filter中重定向问题

老师,我想使用一个LoginFilter过滤器来防止用户在未登录的情况下通过url地址直接访问其他页面(比如修改信息,未登录留言等情况),但在过滤器中判断Session域中“user”是否为空后通过转发能够实现想要的结果,但浏览器的URL地址并没有发生变化,用户体验不佳;如果使用重定向功能,浏览器并不会跳转页面,抛出异常,500错误。请问老师,使用重定向功能应该怎么实现?

public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
    HttpServletRequest request = (HttpServletRequest) req;
    HttpServletResponse response = (HttpServletResponse) resp;
    User user = (User) request.getSession().getAttribute("user");
    if (user == null){
        request.getRequestDispatcher("/message/list.do").forward(request,response);
        //response.sendRedirect(request.getContextPath()+"/message/list.do");
    }
    chain.doFilter(req,resp);
}

http://img1.sycdn.imooc.com//climg/5aedc36c0001425f08650563.jpg

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

从你的错误提示看,在forward之前是否进行了其他重定向操作呢,你检查一下过滤器的代码,如果还有其他重定向或者转发的语句,最好在语句后面写上return,代码就不会再往下执行了。

如果还有问题,建议把相关代码贴全

祝学习愉快!

  • Special994 提问者 #1
    Filter中只有一个重定向,在后面加上return后没问题了,是不是每个Filter中的重定向或者转发都要加上return呢?
    2018-05-06 14:01:20
  • 好帮手慕珊 回复 提问者 Special994 #2
    最好加上~
    2018-05-06 14:09:47
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
Java数据库开发与实战应用2018版
  • 参与学习           人
  • 提交作业       277    份
  • 解答问题       4297    个

Java数据库开发的必备技能,从流行的MySQL数据库开始,到Java原生的数据库管理接口JDBC的使用,再到常用的数据持久化框架MyBatis,让你向Java工程师的目标又迈进了一步!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师