1. 程式人生 > >關於攔截器,防止從位址列輸入action或者controller直接訪問

關於攔截器,防止從位址列輸入action或者controller直接訪問

為了防止非法訪問,訪客能夠從位址列直接進入的只能有login.jsp。可以從過濾器進行限制。

資料來源於網路。這裡只做整理和記錄。

1.新建一個類,命名為filter,可以重新再src下新建一個包,在包中新增一個class,然後命名。

本次在src下新建一個package,命名為filter,在該包下新建一個class,命名為filter,在該class中編寫過濾器:

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.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class filter extends HttpServlet implements Filter{//記得整合和宣告
	public void doFilter(ServletRequest req, ServletResponse resp,
			FilterChain chain) throws IOException, ServletException {
 
		HttpServletRequest request = (HttpServletRequest) req;
		HttpServletResponse response = (HttpServletResponse) resp;
		HttpSession session = request.getSession(true);
 
		String url = request.getRequestURI();//獲取位址列的url
		String uname= (String) session.getAttribute("uname");//獲取登入時存放的session
		if (uname== null && url.indexOf("login.jsp") == -1//未登陸、當前不是登陸的Jsp、也不是登陸的.do
				&& !url.equals("/login")) {//判斷條件可以酌情新增
			String location = "/page/index.jsp";//定義當訪客非法訪問不被允許的地址時跳轉的介面
			request.getRequestDispatcher(location).forward(request, response);//跳轉至指定介面
			response.setHeader("Cache-Control", "no-store");
			response.setDateHeader("Expires", 0);
			response.setHeader("Pragma", "no-cache");
		} else {
			chain.doFilter(request, response);
		}
	}
 
	public void init(FilterConfig arg0) throws ServletException {
	}

	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		
	}
}

2.在web.xml中宣告過濾器:

<filter>
		<filter-name>dofilter</filter-name><!--過濾器的方法名-->
		<filter-class>filter.filter</filter-class><!--包名.類名-->
	</filter>
	<filter-mapping>
		<filter-name>dofilter</filter-name><!--方法名-->
		<!-- 定義規則 -->
		<url-pattern>/*</url-pattern>
<!--定義需要走過濾器的物件,此時是對所有url都必須走過濾器。如果只需要對jsp進行過濾,name就把/*換成/*.jsp,對於其他字尾也是一樣-->
	</filter-mapping>
	<filter>
	<filter-name>struts2</filter-name>
		<filter-class>com.fangyu.filter.UeditorStrutsFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

注:一定要先自定義的過濾器,然後再struts的過濾器,否則自定義那個會失效,因為進來的會先走struts的過濾,而struts是完全允許的,所以不會走自定義那個。所以必須先自定義的再struts的