大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

Filter過濾器

Servlet3.0下@WebFilter

Filter(過濾器)主要對請求到達前進行處理,也可以在請求結束后進行處理,類似于鏈式。一個請求可以被多個過濾器攔截到,會依次進入各個Filter中,放行后直至進入Servlet,Servlet處理請求結束后,回到各個Filter繼續執行后面的代碼,先執行的Filter后執行完。

常用到的地方

用戶權限過濾

記錄日志

字符編碼處理

配置Filter

@WebFilter注解

web.xml中配置

@WebFilter常用屬性

用戶權限過濾示例

1、方式一,@WebFilter注解方式

自定義過濾器,實現javax.servlet.Filter接口,通過注解方式配置。攔截所有的請求,放行登錄頁面、登錄操作請求,其余請求需要在登錄后才可訪問。同時配置參數,指定要放行的路徑和請求的字符集。


@WebFilter(filterName = "loginFilter", 
	urlPatterns = "/*", 
	initParams = {
			@WebInitParam(name = "loginUI", value = "/home/loginUI"),
			@WebInitParam(name = "loginProcess", value = "home/login"),
			@WebInitParam(name = "encoding", value = "utf-8")
	})
public class LoginFilter implements Filter {
	private FilterConfig config;
	
	@Override
	public void init(FilterConfig config) throws ServletException {
		this.config = config;
	}
 
 
	@Override
	public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
			throws IOException, ServletException {
		// 獲取配置參數
		String loginUI = config.getInitParameter("loginUI");
		String loginProcess = config.getInitParameter("loginProcess");
		String encoding = config.getInitParameter("encoding");
 
 
		HttpServletRequest request = (HttpServletRequest) req;
		HttpServletResponse response = (HttpServletResponse) res;
		
		// 設置請求的字符集(post請求方式有效)
		request.setCharacterEncoding(encoding);
		
		// 不帶http://域名:端口的地址
		String uri = request.getRequestURI();
		if (uri.contains(loginUI) || uri.contains(loginProcess)) {
			// 請求的登錄,放行
			chain.doFilter(request, response);
		} else {
			if (request.getSession().getAttribute("user") == null) {
				// 重定向到登錄頁面
				response.sendRedirect(request.getContextPath() + loginUI);
			} else {
				// 已經登錄,放行
				chain.doFilter(request, response);
			}
		}
	}
	
	@Override
	public void destroy() {
		this.config = null;
	}
}

2、方式二,web.xml方式配置

通過在web.xml文件中配置,去掉方式一中的@WebFilter注解,其余代碼相同


<filter>
  	<filter-name>loginFilter</filter-name>
  	<filter-class>cn.edu.njit.filter.LoginFilter</filter-class>
  	<init-param>
  		<param-name>loginUI</param-name>
  		<param-value>/home/loginUI</param-value>
  	</init-param>
  	<init-param>
  		<param-name>loginProcess</param-name>
  		<param-value>home/login</param-value>
  	</init-param>
  	<init-param>
  		<param-name>encoding</param-name>
  		<param-value>utf-8</param-value>
  	</init-param>
</filter>
<filter-mapping>
  	<filter-name>loginFilter</filter-name>
  	<url-pattern>/*</url-pattern>
</filter-mapping>

3、注

●  Filter和Servlet比較相似,從屬性以及配置方式上可以看出,可以理解為Servlet的加強版;

● Filter中對權限的過濾、字符編碼的處理、日志的記錄可以看成是各個Servlet中重復代碼的抽取;

● 對于字符編碼的處理,request.setCharacterEncoding()對post方式的請求有效;若是get方式,可以使用new String(xxx.getBytes("iso-8859-1"), "utf-8")進行處理,否則表單的中文會亂碼;也可以使用代理方式,每當通過request.getParameter()時自動進行編碼處理;

全部教程
主站蜘蛛池模板: 国产成人精品午夜在线播放 | 日韩欧美成末人一区二区三区 | 亚洲综合精品香蕉久久网97 | 国产精品无码久久综合网 | 精品一区二区三区色花堂 | 国产精自产拍久久久久久蜜 | 精品国产中文字幕 | 国产人成精品综合欧美成人 | 女人18一级毛片免费观看 | 日本一区二区三区高清在线观看 | 一级黄网站 | 国产福利在线观看永久视频 | 亚洲欧美一区二区三区久久 | 97黄网| 天天噜夜夜操 | 精品无人乱码一区二区三区 | 久久精品国产亚洲麻豆小说 | 色婷五月 | 国产精品一在线观看 | 免费国产不卡午夜福在线 | 青青青免费手机版视频在线观看 | 人喾交性专区免费看 | 久久怡红院国产精品 | 国产国产人免费观看在线视频 | www.欧美精品 | 欧美一级毛片免费网站 | 国产成人精品日本亚洲语音1 | 一区二区中文字幕亚洲精品 | 番茄视频在线观看黄版本免费 | 欧美 日韩 中字 国产 | 99久久国产综合精品成人影院 | 久久国产精品免费看 | 久久综合噜噜激激的五月天 | 国内一区二区 | 久久综合爱 | 国内偷自视频区视频综合 | 在线播放精品一区二区啪视频 | 在线不卡一区二区 | 国产l精品国产亚洲区在线观看 | 99在线观看国产 | 久热精品免费 |