权限控制 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() { } }