詳解Struts2中對未登錄jsp頁面實現(xiàn)攔截功能
struts2中攔截器大家都很經(jīng)常使用,但是攔截器只能攔截action不能攔截jsp頁面。這個時候就有點尷尬了,按道理來說沒登錄的用戶只能看login界面不能夠通過輸入url進(jìn)行界面跳轉(zhuǎn),這顯然是不合理的。這里介紹struts2中filter實現(xiàn)jsp頁面攔截的功能。(有興趣的人可以去研究filter過濾器的其它用法,因為利用過濾器也可以實現(xiàn)action攔截的功能)
下面直接上代碼,邊看邊分析實現(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>
這里有幾點需要注意的是:
1.過濾器要盡量放在struts2配置代碼的上面。
2.在sessioninvalidate中 <url-pattern>*.jsp</url-pattern> 配置非常重要。*.jsp表示只過濾jsp的界面不會把css,js,action一起給過濾了。如果寫成/*就會把所有的東西一起過濾了。包括css,js,action等。所以這個地方一定要看仔細(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; /** * 用于檢測用戶是否登陸的過濾器,如果未登錄,則重定向到指的登錄頁面 配置參數(shù) checksessionkey 需檢查的在 session 中保存的關(guān)鍵字 * redirecturl 如果用戶未登錄,則重定向到指定的頁面,url不包括 contextpath notcheckurllist * 不做檢查的url列表,以分號分開,并且 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()); } } } }
到這里過濾器的功能就實現(xiàn)了。再重申一下web.xml中配置的信息,需要好好檢查檢查因為那里是過濾器是否成功的關(guān)鍵。
總結(jié)
本文關(guān)于詳解struts2中對未登錄jsp頁面實現(xiàn)攔截功能的介紹就到這里,希望對大家有所幫助。歡迎參閱:struts2開發(fā)流程及詳細(xì)配置 struts2修改上傳文件大小限制方法解析等。有什么問題可以隨時留言,小編會及時回復(fù)大家。感謝朋友們對碩編程的支持。
相關(guān)文章
- jsp+servlet實現(xiàn)文件上傳與下載功能
- EJB3.0部署消息驅(qū)動Bean拋javax.naming.NameNotFoundException異常
- 在JSP中使用formatNumber控制要顯示的小數(shù)位數(shù)方法
- 秒殺系統(tǒng)Web層設(shè)計的實現(xiàn)方法
- 將properties文件的配置設(shè)置為整個Web應(yīng)用的全局變量實現(xiàn)方法
- JSP使用過濾器防止Xss漏洞
- 在JSP頁面中動態(tài)生成圖片驗證碼的方法實例
- 詳解JSP 內(nèi)置對象request常見用法
- 使用IDEA編寫jsp時EL表達(dá)式不起作用的問題及解決方法
- jsp實現(xiàn)局部刷新頁面、異步加載頁面的方法
- Jsp中request的3個基礎(chǔ)實踐
- JavaServlet的文件上傳和下載實現(xiàn)方法
- JSP頁面的靜態(tài)包含和動態(tài)包含使用方法