New file |
| | |
| | | package com.whyc.filter; |
| | | |
| | | import javax.servlet.*; |
| | | import javax.servlet.annotation.WebFilter; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import javax.servlet.http.HttpServletRequestWrapper; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.io.IOException; |
| | | |
| | | /** |
| | | * @Description : |
| | | * @date 2020/09/11 |
| | | **/ |
| | | @WebFilter |
| | | public class CrossDomainFilter implements Filter { |
| | | |
| | | |
| | | @Override |
| | | public void init(FilterConfig filterConfig) throws ServletException { |
| | | System.out.println("执行了过滤器CrossDomainFilter"); |
| | | } |
| | | |
| | | @Override |
| | | public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { |
| | | HttpServletResponse resp= (HttpServletResponse) response; |
| | | HttpServletRequest req= (HttpServletRequest) request; |
| | | String origin = req.getHeader("Origin"); |
| | | // String origin = "http://localhost:8080"; |
| | | resp.setHeader("Access-Control-Allow-Origin", origin); |
| | | resp.setHeader("Access-Control-Allow-Headers", "X-Requested-With,content-type,token"); |
| | | resp.setHeader("Access-Control-Expose-Headers", "content-disposition"); |
| | | resp.setHeader("Access-Control-Allow-Methods", "GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, PATCH"); |
| | | resp.setHeader("Access-Control-Allow-Credentials", "true"); |
| | | |
| | | //处理响应头缺失,信息漏洞 |
| | | resp.addHeader("X-Frame-Options","SAMEORIGIN"); |
| | | resp.addHeader("Referrer-Policy","origin"); |
| | | resp.addHeader("Content-Security-Policy","object-src 'self'"); |
| | | resp.addHeader("X-Permitted-Cross-Domain-Policies","master-only"); |
| | | resp.addHeader("X-Content-Type-Options","nosniff"); |
| | | resp.addHeader("X-XSS-Protection","1; mode=block"); |
| | | resp.addHeader("X-Download-Options","noopen"); |
| | | resp.addHeader("Strict-Transport-Security","max-age=63072000; includeSubdomains; preload"); |
| | | |
| | | //单页面应用,只允许一个页面index.html |
| | | String servletPath = req.getServletPath(); |
| | | if(servletPath.contains(".html")){ |
| | | if(!servletPath.equals("/index.html") && !servletPath.equals("/doc.html") && !servletPath.equals("/mobile/index.html")){ |
| | | resp.setStatus(202); |
| | | return; |
| | | } |
| | | HttpServletRequestWrapper wrapper = new HttpServletRequestWrapper((HttpServletRequest)req); |
| | | if(servletPath.equals("/index.html") && req.getParameter("n") == null) { |
| | | RequestDispatcher dispatcher = wrapper.getRequestDispatcher("/"); |
| | | dispatcher.forward(request, resp); |
| | | return; |
| | | } |
| | | } |
| | | |
| | | chain.doFilter(request, resp); |
| | | } |
| | | |
| | | @Override |
| | | public void destroy() { |
| | | |
| | | } |
| | | } |