A. session過濾器在web.xml怎麼配置詳情
可以把<url-pattern>的值改為"*",默認全都過濾,然後在過濾器裡面寫一個正則表達式:
String str = "[\\w]{1,}\\.jsp$";來判斷是否是jsp頁面,如果是就不執行doFilter()方法,這樣過濾才算靈活,獲取請求的文件名不用我說了吧?相信你會的
B. 怎麼用過濾器管理用戶session
我們經常會碰到這樣的情況,當我們有事情離開了一會,等再回來繼續我們在網頁中的操作時,會出現session超時的錯誤,然後跟上一堆的錯誤,讓用戶感覺很不爽,像這種情況如果能在一個錯誤頁面給個Session超時的提示就會比較友好些,再一種情況,當一個系統中的用戶角色有多個,有些頁面對於一些級別低的用戶來說是沒有許可權觀看的,可能在頁面上能根據不同的許可權屏蔽了一些鏈接讓低級別的用戶無法進入,但是這只能讓低級別的用戶看不見高級操作的鏈接,假如用戶知道鏈接的地址直接在地址欄中輸入鏈接,豈不是也可以進入系統啊,要解決這兩個問題就得在頁面中做判斷了。
If(session== null) {
//如果是超時則跳轉到登陸頁面重新登陸
}
If(checkAuthority() == false) {
//如果許可權不足則跳轉到錯誤頁面給個提示
}
每個.jsp頁面中加上以上的判斷貌似能夠解決問題,然而一個系統往往有成百上千的jsp頁面,倘若每個頁面都這樣加豈不是很費事,而且如果將來的許可權判斷發生變化,將要維護所有的jsp這樣的工作量是很大的,靈活性很差,要是在進入這些jsp之前必須統一經過一個地方,在這個地方來做判斷貌似要好一下,我們使用了過濾器來解決了這個問題
新建一個過濾器命名為:FilterDemo,該類繼承自:javax.servlet.Filter
{
publicvoiddestroy() {}
publicvoiddoFilter(ServletRequest sreq, ServletResponse response,
FilterChain filterChain)
throwsIOException, ServletException {
HttpServletRequest request=(HttpServletRequest)sreq;
HttpSessionsession= request.getSession(false);
if(session==null) {
//如果是session超時,在此處做處理
}
if(request.getRequestURI().endsWith("download.do")) {
//此處可以針對不同的請求根據用戶是否具有許可權來做處理
}
request.getRequestDispatcher("/Error.jsp").
forward(request,response);
}
publicvoidinit(FilterConfig filterConfig)
throwsServletException {}
}
然後將新建的Filter添加到web.xml中,部署Filter需要添加兩部分:
1.filter元素
filter元素位於部署描述符文件(web.xml)的前部,所有filter-mapping、servlet或servlet-mapping元素之前。
<filter>
<filter-name>SessionFilter</filter-name>
<filter-class>myPackage.FilterDemo</filter-class>
</filter>
2.filter-mapping元素
filter-mapping元素位於web.xml文件中filter元素之後serlvet元素之前
<filter-mapping>
<filter-name>SessionFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
以上內容表示所以的請求中以.do結尾的都有首先通過我們這里指定的過濾器:
新建一個Servlet來測試:
{
=1L;
publicDownLoadDemo() {
super();
}
protectedvoiddoGet(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException {
this.doPost(request, response);
}
protectedvoiddoPost(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException {
request.getRequestDispatcher("/DownLoadExcel.jsp").
forward(request, response);
}
}
在web.xml中部署好該servlet
<servlet>
<servlet-name>DownLoadDemo</servlet-name>
<servlet-class>com.sinosoft.base.sessiondemo.DownLoadDemo</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DownLoadDemo</servlet-name>
<url-pattern>/download</url-pattern>
</servlet-mapping>
新建jsp來測試
Index.jsp
<body>
<formaction="download.do">
<h1>This is a Demo Application</h1>
<ahref='DownLoadExcel.jsp'>導出Excel</a>
<inputtype='submit'>
</form>
</body>
為了便於對比我們使用了一個是超鏈接的形式,一個是通過servlet來跳轉,當點擊提交按鈕時會被攔截,而直接點擊超鏈接就不會被攔截,因為我們的Filter中配置的是攔截.do形式的,如果要攔截jsp也可以使用<url-pattern>DownLoadExcel.jsp </url-pattern>
再添加一個錯誤頁面Error.jsp
<body>
<h1>對不起,你沒有許可權</h1>
</body>
C. filter過濾器初始化方法怎麼引用session作用域對象
一、servlet:
1、servlet屬於j2ee的組件,構建servlet的web project不需要導入項目框架jar包
2、servlet的體系結構:
在j2ee API中,提供給servlet的支持介面和基類都位於javax.servlet.*和javax.servlet.http.*(提供所有與http請求有關的API)兩個包中
servlet包中常使用的介面
Interface ServletConfig
Interface ServletContext
Interface ServletRequest
Interface ServletResponse
Interface Servlet:此介面中提供的方法有init,getServletConfig,getServletInfo,destroy,service
jqavax.servlet.Genericservlet(實現了servlet介面,實現了基本servlet功能,提供有service()方法)
javax.servlet.http.HttpServlet(繼承了Genericservlet類,可以處理http請求,提供的doGet()+doPost()和service()方法作用相同
3、實現servlet控制器的功能類需要繼承HttpServlet類,並重寫HttpServlet類中的方法
D. java爬蟲要配置session過濾器嗎
我們經常會碰到這樣的情況,當我們有事情離開了一會,等再回來繼續我們在網頁中的操作時,會出現session超時的錯誤,然後跟上一堆的錯誤,讓用戶感覺很不爽,像這種情況如果能在一個錯誤頁面給個Session超時的提示就會比較友好些
E. 如何實現檢查session許可權的過濾器
formaction="#"method=post>
用戶名:<inputtype=textname=user><br>
密碼:<inputtype=passwordname=pwd><br>
<inputtype=submitname=sbumitvalue=提交>
<inputtype=resetname=resetvalue=重置>
<?
session_start();
$_SESSION["user"]=$_POST[user];
$_SESSION["password"]=$_POST[pwd];
if($_SESSION[user]==""){
echo"<mce:scripttype="text/javascript"><!--
alert('用戶名不能為空!');
//--></mce:script>";
}
if($_SESSION["user"]=="admin"){
echo"當前登內錄:系統管理容員<br><ahref='users_manage.php'>用戶管理</a>";
}else{
echo"當前登錄:".$_SESSION[user]."<br><ahref='album.php'>我的相冊</a>";
}
?>
F. java 過濾器 怎麼獲取session
filter裡面的doFilter方法裡面不是有 request參數嗎 用這個對象就可以獲取session
G. 過濾器的配置
工業過濾器是輸送介質管道上不可缺少的一種裝置,通常安裝在減壓閥、泄壓閥、定水專位閥 ,方工過屬濾器其它設備的進口端設備。其主要是由由筒體、不銹鋼濾網、排污部分、傳動裝置及電氣控制部分組成。
在這里為大家推薦一款過濾中常見的過濾器-多袋快開過濾器,是適用於高流量及頻繁更換濾袋的一種快捷、高效過濾設備。這種過濾器主要作用於電子、半導體、化工、制葯、食品飲料、造紙等各種工業領域。
H. JAVA可以用過濾器向SESSION傳值嗎
不知道你問的是技術還是規范:
1、技術
過濾器的參數中,有一個是request,通過request.getSession(true)可以獲取到關聯的session對象(request的類型需要強轉),然後通過session.setAttribute設置參數即可。
2、規范
通常來說,上面的情況沒有明顯的業務場景,一般有的場景是:過濾器檢測到一些特殊的情況的時候,直接通過request.setAttribute來將一些配置set到request對象上,這樣在servlet/Action/Controller就可以獲取到這些參數進行業務處理了。
I. jsp+servlet中session失效後跳轉到登錄頁面 ,用過濾器filter來寫,希望能有具體步驟和注釋
public class SsFilter implements Filter {
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response;
HttpSession session = req.getSession();
if (session.getAttribute("user") == null) {
resp.sendRedirect("/index.jsp");
return;
}
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
}
}
J. 共享session,以及過濾器和攔截器的區別
1、首先要明確什麼是攔截器、什麼是過濾器
1.1 什麼是攔截器:
攔截器,在AOP(Aspect-Oriented Programming)中用於在某個方法或欄位被訪問之前,進行攔截然後在之前或之後加入某些操作。攔截是AOP的一種實現策略。
在Webwork的中文文檔的解釋為——攔截器是動態攔截Action調用的對象。它提供了一種機制可以使開發者可以定義在一個action執行的前後執行的代碼,也可以在一個action執行前阻止其執行。同時也是提供了一種可以提取action中可重用的部分的方式。
談到攔截器,還有一個詞大家應該知道——攔截器鏈(Interceptor Chain,在Struts 2中稱為攔截器棧 Interceptor Stack)。攔截器鏈就是將攔截器按一定的順序聯結成一條鏈。在訪問被攔截的方法或欄位時,攔截器鏈中的攔截器就會按其之前定義的順序被調用。