判断是否登录的过滤器实现不了
# 具体遇到的问题
用来判断用户是否已登录的过滤器无法运行
# 报错信息的截图
# 相关课程内容截图
# 尝试过的解决思路和结果
# 粘贴全部相关代码,切记添加代码注释(请勿截图)
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 + "我是拦截器" );
}
}
正在回答
同学你好,从同学注释的路径上看,同学重定向时的路径是method=login;在上面放行了“/login”,所以导致一直重定向;同学在url中将“/login”改为“login”试试
祝学习愉快
同学你好,同学过滤器判断可参考如下代码,相关思路写在注释中
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(),否则返回登陆页面。
祝学习愉快
- 参与学习 人
- 提交作业 9393 份
- 解答问题 16556 个
综合就业常年第一,编程排行常年霸榜,无需脱产即可学习,北上广深月薪过万 无论你是未就业的学生还是想转行的在职人员,不需要基础,只要你有梦想,想高薪
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星