过滤器访问页面一直显示不正常

过滤器访问页面一直显示不正常

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package com.zt.filter;
 
import java.io.IOException;
import java.util.List;
 
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import com.zt.user.User;
 
 
 
public class AuthFilter implements Filter {
 
 
    public void destroy() {
         
    }
 
     
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest hsRequest=(HttpServletRequest)request;
        HttpServletResponse hsResponse=(HttpServletResponse)response;
         
        List<User> list=(List<User>)hsRequest.getServletContext().getAttribute("userList");
        if(list.isEmpty()) {
            hsResponse.sendRedirect(hsRequest.getContextPath()+"/login.jsp");
             
        }else {
        chain.doFilter(request, response);
         
        }
    }
 
 
    public void init(FilterConfig fConfig) throws ServletException {
         
    }
 
}

页面一直显示

该网页无法正常运作

localhost 将您重定向的次数过多。


正在回答

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

3回答

同学你好!

你在重定向之前自己创建seesion试试,比如:

1
2
3
4
5
6
7
8
request.getSession();
if(list.isEmpty()) {
            hsResponse.sendRedirect(hsRequest.getContextPath()+"/login.jsp");
             
        }else {
        chain.doFilter(request, response);
         
        }

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~

  • 慕仔0431810 提问者 #1
    还是不行,页面一直显示 localhost将您重定向次数过多。我觉得会不会是没有用户信息,页面就一直重定向,进入了死循环这个状态了呢
    2019-12-13 13:35:37
好帮手慕柯南 2019-12-13 15:29:40

同学你好!

一直这样的原因是因为:

你拦截的是所有的页面*.jsp页面,这样导致你重定向到login.jsp也被拦截了,导致一直循环执行

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

修改建议:不要拦截所有的jsp页面,将login.jsp排除,比如:

可以将其它的页面放在一个文件夹下,拦截时拦截这个文件夹下的页面,假设放其它页面的文件夹是BookManagementPage,xml中可以这么写:

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

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~



好帮手慕小班 2019-12-12 18:11:14

同学你好,同学的控制台有没有报错信息显示呐,建议同学将自己的web.xml内容贴出,老师拼接代码测试运行一下。这里老师只测试添加AuthFilter,是可以正常过滤的。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 提问者 慕仔0431810 #1
    控制台显示: 严重: Servlet.service() for servlet [jsp] in context with path [/login_library] threw exception [javax.servlet.ServletException: java.lang.IllegalStateException: Cannot create a session after the response has been committed] with root cause java.lang.IllegalStateException: Cannot create a session after the response has been committed at org.apache.catalina.connector.Request.doGetSession(Request.java:2993) at org.apache.catalina.connector.Request.getSession(Request.java:2432)
    2019-12-12 19:33:30
  • 提问者 慕仔0431810 #2
    XML配置: <filter> <filter-name>AuthFilter</filter-name> <filter-class>com.zt.filter.AuthFilter</filter-class> </filter> <filter-mapping> <filter-name>AuthFilter</filter-name> <url-pattern>*.jsp</url-pattern> </filter-mapping>
    2019-12-12 19:34:27
  • 提问者 慕仔0431810 #3
    清楚eclipse缓存后 ,控制台 不显示错误了 但是在页面中访问http://localhost:8080/login_library/login.jsp 一直是显示 该网页无法正常运作localhost 将您重定向的次数过多。
    2019-12-12 19:38:41
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

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