教你使用servlet攔截器,放行不需要攔截的內容


一般來說什么權限,日志問題都需要攔截器,servlet原生態攔截器肯定是沒有框架中的攔截器好用的,特別是排除放行的內容,是不好用的,下面舉個例子說明

package 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 com.mysql.jdbc.StringUtils;

public class RoleFilter implements Filter{
    public static String defaultUrl;
    // 不攔截的資源類型
    private static String[] ignoreTypes;
    @Override
    public void destroy() {
        System.out.println("銷毀攔截器");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
            FilterChain chain) throws IOException, ServletException {
            HttpServletRequest request = (HttpServletRequest)servletRequest;
            HttpServletResponse response = (HttpServletResponse)servletResponse;
            String requestUri = request.getRequestURI();
            String contextPath = request.getContextPath();
            String url = requestUri.substring(contextPath.length());
           
            
            boolean isIgnoreType = false;
            if(ignoreTypes != null){
                for (int i = 0; i < ignoreTypes.length; i++) {
                    if (url.endsWith("." + ignoreTypes[i])) {
                    isIgnoreType = true;
                    break;
                    }
                }
            }else{
                chain.doFilter(request, response);
            }
            
            if(url.indexOf("/login.action") > -1||url.indexOf("/loginbuttom.action") > -1||url.indexOf("/loginsub.action") > -1||isIgnoreType==true){
                System.out.println(url+"這是登錄入口或者靜態資源,放行");
                chain.doFilter(request, response);
            }else{
                String name = (String)request.getSession().getAttribute("UserName");
                if(name==null){
                    response.sendRedirect(contextPath+"/login.action");
                }else{
                    System.out.println("用戶名:"+name);
                    chain.doFilter(request, response);
                }
            }
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException { defaultUrl = filterConfig.getInitParameter("defaultUrl"); String ignoreTypes = filterConfig.getInitParameter("ignoreTypes"); if(ignoreTypes != null && !ignoreTypes.trim().equals("")){ this.ignoreTypes = ignoreTypes.split(","); } }

}

這是攔截器的java代碼,實現filter接口就行了,然后看看web.xml的配置

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>Web_03</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
		<servlet-name>CenterController</servlet-name>
		<servlet-class>controller.CenterController</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>CenterController</servlet-name>
		<url-pattern>*.action</url-pattern>
	</servlet-mapping>
	<filter>
		<filter-name>RoleFilter</filter-name>
		<filter-class>filter.RoleFilter</filter-class>
		<init-param>
			<param-name>defaultUrl</param-name>
			<param-value>http://www.baidu.com</param-value>
		</init-param>
		<init-param>
			<param-name>ignoreTypes</param-name>
			<param-value>gif,bmp,png,jpg,js,flash,css</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>RoleFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
</web-app>

  配置就是這么簡單,靜態元素就在

ignoreTypes里面配置就可以了,非常簡單


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM