当用户访问我们的网站时,对于部分页面我们希望他必须使用账号登录,而现在有个问题是,用户直接访问对应页面的地址而直接跳过账号登录,这个漏洞如何解决呢?
可以使用过滤器,通过登录账号在对应的会话域对象中的参数,判断它是否登录了,如果没登录,就把他拦截下来。
package com.symc.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @Author: 凤文 沈阳医学院2019级医学信息工程 0213
* @CreateTime: 2021/11/18 15:53
* @Description: 检查登录
* 1.实现Filter接口,重写doFilter方法
* 2.将请求和响应对象转换为HTTP协议相关
* 3.获取会话域对象中数据
* 4.判断用户名是否获取,获取了就直接进入,没获取就重定向到登录页面
* 5.注解拦截,多个拦截路径
*/
@WebFilter(value = {"/addStudent.jsp","/listStudentServlet"})
public class LoginFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
Object username = request.getSession().getAttribute("username");
if (username == null) {
response.sendRedirect(request.getContextPath() + "/login.jsp");
return;
}
filterChain.doFilter(request,response);
}
}