权限控制 Filter

权限控制过滤器

一. maven

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>2.3.1.RELEASE</version>
</dependency>

 二.配置类

编写WebConfig.java

package com.feng.config;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.sun.xml.internal.ws.policy.privateutil.PolicyUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.io.InputStream;
import java.util.Collections;

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Value("${cas.config.file:cas-config.properties}")
    private String casConfigFile;

    @Bean
    public FilterRegistrationBean<AccessControlFilter> accessControlFilterFilterRegistrationBean(){
        FilterRegistrationBean<AccessControlFilter> accessBean = new FilterRegistrationBean<>();
        accessBean.setFilter(new AccessControlFilter());
        accessBean.addInitParameter("notCheckpathList", "/login,/main.do,/logout.do");
        accessBean.addUrlPatterns("*.do", "*.screen");
        return accessBean;
    }

    @Bean
    @Order(2)
    public FilterRegistrationBean<CasFilter> casFilterFilterRegistrationBean(){
        FilterRegistrationBean<CasFilter> filterBean = new FilterRegistrationBean<CasFilter>();
        filterBean.setFilter(new CasFilter());

        InputStream ins = this.getClass().getClassLoader().getResourceAsStream(casConfigFile);
        if (ins == null){
            System.out.println("cas config file null");
        }
        filterBean.addInitParameter("cas-config", casConfigFile);
        filterBean.addInitParameter("exludesURI", "/path/*.do,/greeting.do");
        filterBean.setName("cas");
        filterBean.setUrlPatterns(Collections.singletonList("*"));
        return filterBean;
    }
}

 三.编写过滤器

AccessControlFilter.java

package com.feng.config;

import javax.servlet.*;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

/**
 * 权限控制
 */
public class AccessControlFilter implements Filter {

    private static String NOT_CHECK_PATH = null;
    private static String TIMEOUT_INFO = "Session time out, Please login again.";

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        NOT_CHECK_PATH = filterConfig.getInitParameter("notCheckPathList");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        String path = null;
        HttpServletRequest httpServletRequest = null;
        if (servletRequest instanceof HttpServletRequest) {
            httpServletRequest = (HttpServletRequest)servletRequest;
            path = httpServletRequest.getServletPath();
        }

        //不需要检查的路径
        if (path != null && (NOT_CHECK_PATH != null && NOT_CHECK_PATH.indexOf(path) != -1)){
            filterChain.doFilter(servletRequest, servletResponse);
        } else if (httpServletRequest.getSession().getAttribute("netsuser") == null) {
            clearSession(httpServletRequest, servletResponse);
        } else {
            filterChain.doFilter(servletRequest, servletResponse);
        }
    }

    private void clearSession(HttpServletRequest hRequest, ServletResponse response){
        HttpSession session = hRequest.getSession();
        session.invalidate();

        Cookie[] cookies = hRequest.getCookies();
        for (int i = 0; i < cookies.length; i++) {
            if ("SESSION".equals(cookies[i].getName())){
                Cookie cookie = new Cookie("SESSION", "");
                cookie.setDomain("xxx.com.cn");
                cookie.setPath("/");
                cookie.setMaxAge(0);
                cookie.setSecure(true);
                ((HttpServletResponse)response).addCookie(cookie);
            }

            if ("flag".equals(cookies[i].getName())){
                Cookie cookie = new Cookie("flag", "");
                cookie.setDomain("xxx.com.cn");
                cookie.setPath("/");
                cookie.setMaxAge(0);
                cookie.setSecure(true);
                ((HttpServletResponse)response).addCookie(cookie);
            }
        }
    }

    @Override
    public void destroy() {

    }
}

 

posted @ 2022-01-12 15:57  IT6889  阅读(107)  评论(0编辑  收藏  举报