关于拦截器,防止从地址栏输入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的

猜你喜欢

转载自blog.csdn.net/qq_37370501/article/details/80867356
今日推荐