使用Filter控制访问登录权限

使用Filter控制权限

当用户访问某网站时,有些页面或 Servlet 在不登录的情况下是可以访问的,例如首页、登录页面等。除此之外大部分资源是必须登录后才能访问的。此时,可以定义一个权限过滤器,对每一个访问该应用的请求进行过滤:若具有访问权限,则直接跳转到相应资源即可;若不具有访问权限,则跳转到登录页面。
修改一下之前写过的登录功能,当用户没有登录时,不能访问login_success页面。

首先在web目录下创建一个success文件夹,之后将login_successf页面移至该文件夹下。

之后创建一个Filter,根据session中是否含有user属性来判断用户是否登录:

package com.monkey1024.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;
import javax.servlet.http.HttpSession;

import com.monkey1024.javabean.User;

/**
 * 权限过滤器
 */
public class PermissionFilter implements Filter {

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest)request;
        HttpServletResponse res = (HttpServletResponse)response;

        //获取请求路径
        String path = req.getServletPath();

        //判断请求路径是是否包含/success
        if(path.startsWith("/success")){
            HttpSession session = req.getSession();
            //如果为null则说明session还未创建,跳转到登录页面
            if(session == null){
                res.sendRedirect("/login.jsp");
            }else{
                User user = (User)session.getAttribute("user");
                //如果为null则说明还没有登录成功,跳转到登录页面
                if(user == null){
                    res.sendRedirect("/login.jsp");
                }
            }

        }

        chain.doFilter(request, response);
    }

    public void destroy() {
    }

    public void init(FilterConfig fConfig) throws ServletException {
    }

}

web.xml文件如下:

 <filter>
    <filter-name>PermissionFilter</filter-name>
    <filter-class>com.monkey1024.filter.PermissionFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>PermissionFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

将应用部署到tomcat并启动成功之后,在浏览器中访问/success/login_success.jsp,此时系统会跳转到login.jsp页面,从而实现了在用户没有登录的情况下不能访问/success/login_success.jsp页面。