相信大家如果做过用户的登录和注册的案例一定知道,对于一些不合法的用户如果知道你的内部完成的情况,就可以直接访问的你的内部完成而省略用户登录的过程,这个过程中存在一定的隐患,对于信息的安全和用户的体验,因此过滤器很好的解决了这部分的问题,下面展示一部分实现的代码,对于用户的登录,注册界面和相关资源给与了授权,其他资源在未登录的情况下禁止访问如下:
/*
* 过滤用户信息,让用户登录后再访问
* */
//@WebFilter("/*")
public class LoginFilter implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest) req;
String uri = request.getRequestURI();
//判断是否包含登录,注册相关的信息和css,js,html
if(uri.contains("user/login") || uri.contains("user/regist") ||
uri.contains("/css/") || uri.contains("/js/") ||
uri.contains("/fonts/") || uri.contains("header.html") ||
uri.contains("/images/") || uri.contains("/img/") ||
uri.contains("footer.html") || uri.contains("register_ok.html")||
uri.contains("/checkCode")){
//放行这些界面
chain.doFilter(request,resp);
}else {
//判断用户是否登录,从session中拿到user信息
User user = (User) request.getSession().getAttribute("user");
if (user != null){
//允许访问资源
chain.doFilter(request,resp);
}else {
//跳转到登录页面
request.setAttribute("login_error","请先登录再访问");
request.getRequestDispatcher("/login.html").forward(request,resp);
}
}
}
|
|