關於攔截器,防止從位址列輸入action或者controller直接訪問
阿新 • • 發佈:2019-01-09
為了防止非法訪問,訪客能夠從位址列直接進入的只能有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的