java 登录过滤_JavaWeb 过滤器——验证登录 防止未登录进入界面

本文介绍了如何在JavaWeb应用中使用过滤器实现登录验证,防止未登录用户访问特定页面。通过创建`LoginFilter`类并实现`Filter`接口,设置可放行的URL,并在`doFilter`方法中检查会话中的登录状态,未登录用户将被重定向到登录页面。
摘要由CSDN通过智能技术生成

packagecom.star.miniShop.Filter;importjava.io.IOException;importjava.util.ArrayList;importjava.util.List;importjavax.servlet.Filter;importjavax.servlet.FilterChain;importjavax.servlet.FilterConfig;importjavax.servlet.ServletException;importjavax.servlet.ServletRequest;importjavax.servlet.ServletResponse;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;

@WebFilter("/*")public class LoginFiter implementsFilter{//实例化一个静态的集合(这里可以改用map集合,提高性能,每次过滤可以不用for匹配)

private static List urls = new ArrayList<>();//静态代码块中向集合中存放所有可以放行的请求或网页地址(不用账号密码即可访问)

static{

urls.add("/logining");

urls.add("/shopLogin.html");

urls.add("/css");

urls.add("/js");

urls.add("/images");

urls.add("/shopHome.html");

urls.add("/HomeShop");

urls.add("/Searchs");

urls.add("/regist");

urls.add("/shopRegist.html");

}

@Overridepublic voiddestroy() {//TODO Auto-generated method stub

}/*** 拦截请求,看看用户是否登陆,如果没有登陆,

* 则跳转回登录页面,否则就放行*/@Overridepublic voiddoFilter(ServletRequest request, ServletResponse response, FilterChain chain)throwsIOException, ServletException {//注意:ServletRequest是HttpServletRequest父接口,因此需要强转//同样,ServletResponse是HttpServletResponse父接口,因此需要强转

HttpServletRequest req=(HttpServletRequest)request;

HttpServletResponse res=(HttpServletResponse)response;//得到当前页面所在目录下全名称

String urlPattern=req.getServletPath();//得到页面所在服务器的绝对路径

String path =req.getRequestURI();//System.out.println(urlPattern);

for(String url : urls) {if(url.equals(urlPattern) ||path.contains(url)) {//System.out.println("reaource do chain...");

chain.doFilter(request, response);//防止重复响应

return;

}

}//如果person为null,表示没有登录

if(req.getSession().getAttribute("person")==null) {

res.sendRedirect("shopLogin.html");

}else{//放行

chain.doFilter(request, response);

}

}

@Overridepublic void init(FilterConfig arg0) throwsServletException {//TODO Auto-generated method stub

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值