判断是否登录的过滤器实现不了

判断是否登录的过滤器实现不了

# 具体遇到的问题
用来判断用户是否已登录的过滤器无法运行
# 报错信息的截图

# 相关课程内容截图

# 尝试过的解决思路和结果

# 粘贴全部相关代码,切记添加代码注释(请勿截图)

package com.imooc.library.filter;

import java.io.IOException;

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.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 * 判断用户是否登录的过滤器
 * @author 林文佳
 *
 */
public class AuthFilter implements Filter {

    private String login_path;
    @Override
    public void destroy() {
        // TODO Auto-generated method stub

    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        // TODO Auto-generated method stub
        HttpServletRequest req = (HttpServletRequest)request;
        HttpServletResponse res = (HttpServletResponse)response;
        boolean flag = false;
        String requestURI = req.getRequestURI();
        String[] url = { ".js", ".css", ".ico", ".jpg", ".png", "/login", ".html" };
        for( String str : url ) {
            if( requestURI.indexOf( str ) != -1 ) {
                flag = true;
                break;
            }
        }
        String login = (String)req.getSession().getAttribute( "login" );
        if( flag ) {
            chain.doFilter( request, response );
        }else if( login == null ) {
            System.out.println( "我还没登录!" );
        }
        System.out.println( login + "我是拦截器的" );

    }

    @Override
    public void init(FilterConfig filterConfig ) throws ServletException {
        // TODO Auto-generated method stub
        login_path = filterConfig.getInitParameter( "login_path" );
        System.out.println( login_path + "我是拦截器" );
    }

}

正在回答

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

3回答

同学你好,从同学注释的路径上看,同学重定向时的路径是method=login;在上面放行了“/login”,所以导致一直重定向;同学在url中将“/login”改为“login”试试

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

祝学习愉快

被抱的树 提问者 2020-11-10 22:29:59

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

老师的登录界面一开始是通过默认页面index.html跳转到controller,再由controller跳转到登录页面login.jsp来进行登录验证,写了过滤器的代码运行之后还是不行

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

还有这个拦截器需要放行.html文件吧?我感觉就是我的login.jsp登录页面被拦截了才导致重定向多次​

好帮手慕阿园 2020-11-10 16:31:55

同学你好,同学过滤器判断可参考如下代码,相关思路写在注释中

User login = (User) req.getSession().getAttribute("login");
String requestURI = req.getRequestURI();
//不需要过滤的url
String[] urls = {"/login", ".js",".css", ".ico",".jpg",".png"};
boolean flag = false;
for (String str : urls) {
    if (requestURI.indexOf(str) != -1) {
        flag = true;
        break;
    }
}
//如果为flag为false,则判断是否登录,如果登录,则放行,没登录则跳转到登录页面
if (!flag) {
if (login!= null) {
	chain.doFilter(request, response);
        return;
}else {
	// 未登录,返回登录页面
	resp.sendRedirect(req.getContextPath()+"/login.jsp");
	return;
}
}
//如果flag为true,表示包含登录,验证码,图片等不需要验证的信息,直接放行
chain.doFilter(request, response);
}

如果flag为true,就直接执行doFilter(),如果是false,则对login进行判断。如果login不为null,则doFilter(),否则返回登陆页面。

祝学习愉快

问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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