精品熟女碰碰人人a久久,多姿,欧美欧美a v日韩中文字幕,日本福利片秋霞国产午夜,欧美成人禁片在线观看

詳解Struts2中對(duì)未登錄jsp頁面實(shí)現(xiàn)攔截功能

struts2中攔截器大家都很經(jīng)常使用,但是攔截器只能攔截action不能攔截jsp頁面。這個(gè)時(shí)候就有點(diǎn)尷尬了,按道理來說沒登錄的用戶只能看login界面不能夠通過輸入url進(jìn)行界面跳轉(zhuǎn),這顯然是不合理的。這里介紹struts2中filter實(shí)現(xiàn)jsp頁面攔截的功能。(有興趣的人可以去研究filter過濾器的其它用法,因?yàn)槔眠^濾器也可以實(shí)現(xiàn)action攔截的功能)

下面直接上代碼,邊看邊分析實(shí)現(xiàn)步驟和原理。

1.web.xml中的配置信息:

<filter>  
  <filter-name>sessioninvalidate</filter-name>  
  <filter-class>com.tp.action.sessioncheckfilter</filter-class> //過濾器核心類的class地址 
  <init-param>  
   <param-name>checksessionkey</param-name> //session中需要檢查的key 
   <param-value>users</param-value>  
  </init-param>  
  <init-param>  
   <param-name>redirecturl</param-name> //過濾重定向的地址 
   <param-value>/login.jsp</param-value>  
  </init-param>  
  <init-param>  
   <param-name>notcheckurllist</param-name> //不需要過濾的jsp 
   <param-value>/login.jsp</param-value>  
  </init-param>  
 </filter>  
 <filter-mapping>  
  <filter-name>sessioninvalidate</filter-name> //需要過濾的文件 
  <url-pattern>*.jsp</url-pattern>  
 </filter-mapping> 

這里有幾點(diǎn)需要注意的是:

1.過濾器要盡量放在struts2配置代碼的上面。

2.在sessioninvalidate中 <url-pattern>*.jsp</url-pattern>  配置非常重要。*.jsp表示只過濾jsp的界面不會(huì)把css,js,action一起給過濾了。如果寫成/*就會(huì)把所有的東西一起過濾了。包括css,js,action等。所以這個(gè)地方一定要看仔細(xì)。

3.sessioncheckfilter過濾的核心類:

package com.tp.action; 
import java.io.ioexception;  
import java.util.hashset;  
import java.util.set;  
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.httpservletrequest;  
import javax.servlet.http.httpservletresponse;  
import javax.servlet.http.httpsession;  
/** 
 * 用于檢測(cè)用戶是否登陸的過濾器,如果未登錄,則重定向到指的登錄頁面 配置參數(shù) checksessionkey 需檢查的在 session 中保存的關(guān)鍵字 
 * redirecturl 如果用戶未登錄,則重定向到指定的頁面,url不包括 contextpath notcheckurllist 
 * 不做檢查的url列表,以分號(hào)分開,并且 url 中不包括 contextpath 
 */  
public class sessioncheckfilter implements filter {  
 protected filterconfig filterconfig = null;  
 private string redirecturl = null;  
 private set<string> notcheckurllist = new hashset<string>();  
 private string sessionkey = null;  
 @override  
 public void destroy() {  
  notcheckurllist.clear();  
 }  
 @override  
 public void dofilter(servletrequest servletrequest,  
   servletresponse servletresponse, filterchain filterchain)  
   throws ioexception, servletexception {  
  httpservletrequest request = (httpservletrequest) servletrequest;  
  httpservletresponse response = (httpservletresponse) servletresponse;  
  httpsession session = request.getsession();  
  if (sessionkey == null) {  
   filterchain.dofilter(request, response);  
   return;  
  }  
  if ((!checkrequesturiintnotfilterlist(request))  
    && session.getattribute("users") == null) {  
     response.sendredirect(request.getcontextpath() + redirecturl);  
   return;  
  }  
  filterchain.dofilter(servletrequest, servletresponse);  
 }  
 private boolean checkrequesturiintnotfilterlist(httpservletrequest request) {  
  string uri = request.getservletpath()  
    + (request.getpathinfo() == null ? "" : request.getpathinfo());  
  string temp = request.getrequesturi(); 
  temp = temp.substring(request.getcontextpath().length() + 1);  
  // system.out.println("是否包括:"+uri+";"+notcheckurllist+"=="+notcheckurllist.contains(uri));  
  return notcheckurllist.contains(uri);  
 }  
 @override  
 public void init(filterconfig filterconfig) throws servletexception {  
  this.filterconfig = filterconfig;  
  redirecturl = filterconfig.getinitparameter("redirecturl");  
  sessionkey = filterconfig.getinitparameter("checksessionkey");  
  string notcheckurlliststr = filterconfig  
    .getinitparameter("notcheckurllist");  
  if (notcheckurlliststr != null) {  
   system.out.println(notcheckurlliststr);  
   string[] params = notcheckurlliststr.split(",");  
   for (int i = 0; i < params.length; i++) {  
    notcheckurllist.add(params[i].trim());  
   }  
  }  
 }  
} 

到這里過濾器的功能就實(shí)現(xiàn)了。再重申一下web.xml中配置的信息,需要好好檢查檢查因?yàn)槟抢锸沁^濾器是否成功的關(guān)鍵。

總結(jié)

本文關(guān)于詳解struts2中對(duì)未登錄jsp頁面實(shí)現(xiàn)攔截功能的介紹就到這里,希望對(duì)大家有所幫助。歡迎參閱:struts2開發(fā)流程及詳細(xì)配置  struts2修改上傳文件大小限制方法解析等。有什么問題可以隨時(shí)留言,小編會(huì)及時(shí)回復(fù)大家。感謝朋友們對(duì)碩編程的支持。

相關(guān)文章