Filter作用 :
每當使用應用服務器頁面或servlet的時候,應用服務器就會根據web.xml里面配置的filter 去進行過濾理。
調用處理過程就是:
1.接受request->去處理第一個filter.init-> 處理第一個filter.doFilter
2.如果不想繼續使用filter過濾就在filter.doFilter中使用 return
3.如果要繼續使用filter過濾就filter.doFilter中 chain.doFilter(servletRequest, servletResponse);
使用例子:
1.web.xml配置
<filter>
<filter-name>Filter_name</filter-name>
<filter-class>Filter_class_name</filter-class>
<init-param>
<description>set 'true' to enable the filter</description>
<param-name>enabled</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>excepts</param-name>
<param-value>Excepts_Path</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Filter_name</filter-name>
<url-pattern>filter_path</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>Filter_name</filter-name>
<url-pattern>filter_path</url-pattern>
</filter-mapping>
2、java代碼
2.1 init 函數
public void init(FilterConfig filterConfig) throws ServletException {
//檢查是否打開SSOFilter功能
String _enable = filterConfig.getInitParameter("enabled");
if (_enable != null && "true".equalsIgnoreCase(_enable)) {
enabled = true;
}
//初始化例外列表,即不經過SSOFilter的請求地址
String _exceptStr = filterConfig.getInitParameter("excepts");
if (_exceptStr != null) {
String[] _excepts = _exceptStr.split(",");
for (int i = 0; i < _excepts.length; i ++) {
excepts.add(_excepts[i]);
}
}
}
2.2 doFilter函數
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
String path = request.getServletPath();
/**
* 當WEB程序啟了SSOFilter,并且請求的路徑沒被配置為例外時,
* 檢查用戶是否已通過統一用戶平臺登錄,已登錄的話創建會話,否則轉到統一登錄頁面。
*/
if (enabled && !excepts.contains(path)) {
if (logger.isDebugEnabled()) {
logger.debug("check member has signoned ...");
}
boolean signOned = SSOHelper.hasSignOned(request, response);
if (logger.isDebugEnabled()) {
logger.debug("Signoned? " + signOned);
}
if (!signOned) {
String SSOContextUri = SysParamHelper.getSysParam(SysParamConstants.CONTEXT_URI_SSO);
StringBuffer url = new StringBuffer(SSOContextUri);
url.append("/Login");
//記住入口地址
url.append("?entrance=");
url.append(request.getRequestURL());
if (request.getQueryString() != null) {
url.append("|");
url.append(request.getQueryString());
}
response.sendRedirect(url.toString());
return;
}
}
chain.doFilter(servletRequest, servletResponse);
}