非法拦截
com.filter包内 ,新建一个 LoginAccessFilter 过滤器,
注解:@WebFilter(" / * ") 拦截所有
@WebFilter("/*") //拦截所有
public class LoginAccessFilter implements Filter {
public LoginAccessFilter() {
}
public void destroy() {
}
1、静态资源(statics目录下的资源) 放行
2、指定页面(登录页面login.jsp、注册页面register.jsp等) 放行
3、指定行为(登录操作、注册操作等) 放行
4、登录状态(session作用域中的user对象不为空) 放行
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
//基于Http
HttpServletRequset request=(HttpServletRequest) req; //强转
HttpServletResponse response=(HttpServletResponse) resp;
//获取请求的路径
String path=request.getRequestURI(); //从站点名到问号结束
//对需要放行内容的操作
//1.静态资源 (statics目录下的资源) 放行
if(path.contains("/statics")){ // 加"/"表示路径
chain.doFilter(request,response);
return;
}
//2.指定页面(登录页面login.jsp、注册页面 register.jsp等)放行
if(path.contains("/login.jsp")){
chain.doFilter(request,response);
return;
}
//3.指定行为(登录操作、注册操作等)放行
//需要先获取行为,得到用户的行为
String action=request.getParameter("user");
if(path.contains("/user")){
if("login".equals(action)){
chain.doFilter(request,response);
return;
}
}
//4.登录状态(session作用域中user对象不为空)放行
User user=request.getSession().getAttribute("user");
if(user!=null){
chain.doFilter(request,response);
return;
}
自动登录
5、当cookie不为空时,可自动调用登录操作
1、获取cookie数组
2、判断cookie是否为空
3、遍历cookie数组,得到指定cookie对象
4、得到cookie对应的cookie,截取得到用户名和密码
5、请求转发调用登录操作
//自动登录
//5.当cookie不为空时,可自动调用登录操作
//1.获取cookie数组
Cookie[] cookies=request.getCookies();
//2.判断cookie是否为空
if(cookies!=null && cookies.length>0){
//3.遍历cookie数组,得到指定cookie对象
for(Cookie cookie:cookies){
//4.得到cookie对应的cookie,截取得到用户名和密码
if("user".equals(cookie.getName)){
String value=cookie.getValue();
String uname=value.split("-")[0];
String upwd=value.spilt("-")[1];
String url="user?action=login&userName="+uname+"&userPwd="+upwd;
//5.请求转发调用登录操作
request.getRequestDispatcher(url).forward(request,response);
return;
}
}
}
//拦截到登录页面
response.sendRedirect("login.jsp");
}
作者:来世还生华夏门
来源:CSDN
原文:https://blog.csdn.net/qq_38708432/article/details/82996540
版权声明:本文为博主原创文章,转载请附上博文链接!