導航:首頁 > 凈水問答 > 過濾器攔截jsp請求

過濾器攔截jsp請求

發布時間:2022-06-18 21:07:38

Ⅰ jsp中過濾器實現什麼功能

過濾器是可用於 Servlet 編程的 Java 類,可以實現以下目的:

Ⅱ jsp/servlet過濾器和struts2攔截器的有什麼區別

攔截器和過濾器的區別:

1、攔截器是基於java的反射機制的,而過濾器是基於函數回調

2、過濾器依賴與servlet容器,而攔截器不依賴與servlet容器

3、攔截器只能對action請求起作用,而過濾器則可以對幾乎所有的請求起作用

4、攔截器可以訪問action上下文、值棧里的對象,而過濾器不能

5、在action的生命周期中,攔截器可以多次被調用,而過濾器只能在容器初始化時被調用一次

攔截器
:是在面向切面編程的就是在你的service或者一個方法前調用一個方法,或者在方法後調用一個方法比如動態代理就是攔截器的簡單實現,在你調用方法前列印出字元串(或者做其它業務邏輯的操作),也可以在你調用方法後列印出字元串,甚至在你拋出異常的時候做業務邏輯的操作。

下面通過實例來看一下過濾器和攔截器的區別:

使用攔截器進行/admin 目錄下jsp頁面的過濾

[html] view plain

<package name="newsDemo"
extends="struts-default"

namespace="/admin">

<interceptors>

<interceptor name="auth"
class="com.test.news.util.AccessInterceptor" />

<interceptor-stack name="authStack">

<interceptor-ref
name="auth" />

</interceptor-stack>

</interceptors>

<!-- action -->

<action name="newsAdminView!*" class="newsAction"

method="{1}">

<interceptor-ref
name="defaultStack"/>

<interceptor-ref
name="authStack">

</interceptor-ref>

下面是我實現的Interceptor class:

[java] view plain

package com.test.news.util;

import java.util.Map;

import com.opensymphony.xwork2.ActionContext;

import
com.opensymphony.xwork2.ActionInvocation;

import
com.opensymphony.xwork2.interceptor.AbstractInterceptor;

import
com.test.news.action.AdminLoginAction;

/**

*
@author chaoyin

*/

public class AccessInterceptor
extends AbstractInterceptor {

private static final long
serialVersionUID = -4291195782860785705L;

@Override

public String intercept(ActionInvocation actionInvocation) throws
Exception {

ActionContext actionContext =
actionInvocation.getInvocationContext();

Map session =
actionContext.getSession();

//except login action

Object action = actionInvocation.getAction();

if (action
instanceof AdminLoginAction) {

return
actionInvocation.invoke();

}

//check
session

if(session.get("user")==null ){

return
"logout";

}

return actionInvocation.invoke();//go
on

}

}

過濾器:是在javaweb中,你傳入的request,response提前過濾掉一些信息,或者提前設置一些參數,然後再傳入servlet或者struts的
action進行業務邏輯,比如過濾掉非法url(不是login.do的地址請求,如果用戶沒有登陸都過濾掉),或者在傳入servlet或者
struts的action前統一設置字元集,或者去除掉一些非法字元。

使用過濾器進行/admin
目錄下jsp頁面的過濾,首先在web.xml進行過濾器配置:

[html] view plain

<filter>

<filter-name>access
filter</filter-name>

<filter-class>

com.test.news.util.AccessFilter

</filter-class>

</filter>

<filter-mapping>

<filter-name>access filter</filter-name>

<url-pattern>/admin/*</url-pattern>

</filter-mapping>

下面是過濾的實現類:

[java] view
plain

package com.test.news.util;

import
java.io.IOException;

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;

public class AccessFilter
implements Filter {

/**

* @author chaoyin

*/

public void destroy() {

}

public void doFilter(ServletRequest arg0, ServletResponse arg1,

FilterChain filterChain) throws IOException, ServletException {

HttpServletRequest request = (HttpServletRequest)arg0;

HttpServletResponse response = (HttpServletResponse)arg1;

HttpSession session = request.getSession();

if(session.getAttribute("user")== null &&
request.getRequestURI()。indexOf("login.jsp")==-1 ){

response.sendRedirect("login.jsp");

return ;

}

filterChain.doFilter(arg0, arg1);

}

public void init(FilterConfig arg0) throws ServletException {

}

}
摘自網路--

Ⅲ struts2攔截器怎麼攔截對jsp頁面的訪問

filter也可以攔截action啊,只要你把自己編寫的 filter過濾器放到Struts2.0的過濾器前面就行了

Ⅳ java web 過濾器跟攔截器的區別和使用

區別如下:

1 、攔截器是基於java的反射機制的,而過濾器是基於函數回調。

2 、攔截器不依賴與servlet容器,過濾器依賴與servlet容器。

3 、攔截器只能對action請求起作用,而過濾器則可以對幾乎所有的請求起作用。

4 、攔截器可以訪問action上下文、值棧里的對象,而過濾器不能訪問。

5 、在action的生命周期中,攔截器可以多次被調用,而過濾器只能在容器初始化時被調用一次。

使用如下:

在Servlet作為過濾器使用時,它可以對客戶的請求進行處理。處理完成後,它會交給下一個過濾器處理,這樣,客戶的請求在過濾鏈里逐個處理,直到請求發送到目標為止。例如,某網站里有提交「修改的注冊信息」的網頁,當用戶填寫完修改信息並提交後,伺服器在進行處理時需要做兩項工作:判斷客戶端的會話是否有效;對提交的數據進行統一編碼。

這兩項工作可以在由兩個過濾器組成的過濾鏈里進行處理。當過濾器處理成功後,把提交的數據發送到最終目標;如果過濾器處理不成功,將把視圖派發到指定的錯誤頁面。

(4)過濾器攔截jsp請求擴展閱讀

攔截器,在AOP(Aspect-Oriented Programming)中用於在某個方法或欄位被訪問之前,進行攔截然後在之前或之後加入某些操作。攔截是AOP的一種實現策略。

在Webwork的中文文檔的解釋為——攔截器是動態攔截Action調用的對象。它提供了一種機制可以使開發者可以定義在一個action執行的前後執行的代碼,也可以在一個action執行前阻止其執行。同時也是提供了一種可以提取action中可重用的部分的方式。

過濾器是一個程序,它先於與之相關的servlet或JSP頁面運行在伺服器上。過濾器可附加到一個或多個servlet或JSP頁面上,並且可以檢查進入這些資源的請求信息。

Ⅳ spring mvc 攔截器怎麼攔截jsp頁面

spring mvc 攔截器怎麼攔截jsp頁面
<mvc:interceptor>
<mvc:mapping path="/**" />
<bean class="net.techfinger.yoyoapp.interceptor.AuthInterceptor" />
</mvc:interceptor>
你這個 是攔截帶 /jsp 的 .do請求

解決方案
用spring 的攔截器 去攔截 所有的 .do 請求,
然後寫一個 過濾器去攔截 所有的.jsp 的請求
這樣才能防止循環過濾

<!-- <servlet-mapping>
<servlet-name>Spring-Servlet</servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping> -->
這種會把所有jsp請求過濾不推薦。

<filter>

<filter-name> loginFilter</filter-name>

<filter-class>

net.techfinger.yoyoapp.interceptor.CheckLoginFilter

</filter-class>

</filter>

<filter-mapping>

<filter-name>loginFilter</filter-name>

<url-pattern>*.jsp</url-pattern>

</filter-mapping>

<servlet-mapping>

<servlet-name>Spring-Servlet</servlet-name>

<url-pattern>*.do</url-pattern>

</servlet-mapping>

public class CheckLoginFilter implements Filter{

@Override

public void destroy() {

// TODO Auto-generated method stub

}

@Override

public void doFilter(ServletRequest servletRequest,

ServletResponse servletResponse, FilterChain filterChain)

throws IOException, ServletException {

// TODO Auto-generated method stub

HttpServletRequest request = (HttpServletRequest) servletRequest;

HttpServletResponse response = (HttpServletResponse) servletResponse;

HttpSession session = request.getSession();

// 獲得用戶請求的URI

String path = request.getRequestURI();

String contextPath = request.getContextPath();

String url = path.substring(contextPath.length());Person person =SessionUtils.getPerson(request);if (person == null) {

response.sendRedirect(contextPath+"/person.do?method=tologin");

return;

}

if (person.getId()!=null&&person.getPassword()!=null) {

filterChain.doFilter(servletRequest, servletResponse);

return;

}

}

@Override

public void init(FilterConfig filterConfig) throws ServletException {}

}

public class AuthInterceptor extends HandlerInterceptorAdapter {

private final static Logger log= Logger.getLogger(AuthInterceptor.class);@Override

public boolean preHandle(HttpServletRequest request,

HttpServletResponse response, Object handler) throws Exception {

HandlerMethod method = (HandlerMethod)handler;

Auth auth = method.getMethod().getAnnotation(Auth.class);

////驗證登陸超時問題 auth = null,默認驗證

if( auth == null || auth.verifyLogin()){

String baseUri = request.getContextPath();

String path = request.getServletPath();

Person person =SessionUtils.getPerson(request);if(person == null){

if(path.endsWith(".jsp")){

response.setStatus(response.SC_GATEWAY_TIMEOUT);

response.sendRedirect(baseUri+"/person.do?method=tologin");

return false;

}else{

response.setStatus(response.SC_GATEWAY_TIMEOUT);

Map<String, Object> result = new HashMap<String, Object>();

/* result.put("success", false);

result.put("logoutFlag", true);//登錄標記 true 退出

result.put("msg", "登錄超時.");

XmlUtil.sendMsg(response, result);*/

response.sendRedirect(baseUri+"/person.do?method=tologin");

return false;

}

}

}

//驗證URL許可權

if( auth == null || auth.verifyURL()){/*//判斷請求的url,是否包含在該角色的url里String methodName=request.getParameter("method");

String menuUrl = StringUtils.remove(request.getRequestURI(),request.getContextPath())+"?method="+methodName;

System.out.println(menuUrl);if(!SessionUtils.isAccessUrl(request, StringUtils.trim(menuUrl))){

//日誌記錄

String userMail = SessionUtils.getPerson(request).getLoginName();

String msg ="URL許可權驗證不通過:[url="+menuUrl+"][email ="+ userMail+"]" ;

log.error(msg);response.setStatus(response.SC_FORBIDDEN);

Map<String, Object> result = new HashMap<String, Object>();

result.put("success", false);

result.put("msg", "沒有許可權訪問,請聯系管理員.");

XmlUtil.sendMsg(response, result);

return false;}

*/}

return super.preHandle(request, response, handler);

}

Ⅵ struts2用過濾器過濾非法jsp請求的時候,對於根文件夾下的請求如何過濾

<filter>
<filter-name>authority</filter-name>
<filter-class>com.bstek.test.demo.filter.AuthorityFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>authority</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--可以匹配多個的,不過只要上面那種就回可以攔截所有的了答<filter-mapping>
<filter-name>authority</filter-name>
<url-pattern>/jsp/*</url-pattern>
</filter-mapping>-->

Ⅶ JSP頁面被過濾器攔截的時候 在Filter中執行doFilter()時 能不能取到是哪個頁面跳轉過來的

1、在Jsp頁面將文本框輸入域放在html表單form之中提交
2、後台定義一個過濾器繼承Filter.java
3、在過濾器中的doFilter方法中,將參數ServletRequest轉化為HttpServletRequest
4、利用HttpServletRequest.getParameter();方法即可獲取對應輸入域的value值。
示例:
在Jsp頁面:
<form>
<input type="text" name="username" value="zhangsan"/>

</form>
後台過濾器:
public class TestFilter implements Filter{

@Override
public void destroy() {
}

@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filter) throws IOException, ServletException {
HttpServletRequest res = (HttpServletRequest) request;
//獲取頁面的username輸入框的值

String username = request.getParameter("username");

return;
}

@Override
public void init(FilterConfig arg0) throws ServletException {

}
}

Ⅷ JSP中用filter 過濾某個包中的所有servlet

web.xml中這樣配置:

<servlet>

<servlet-name>Login</servlet-name>

<servlet-class>com.zq.servlet.Login</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>Login</servlet-name>

<url-pattern>/servlet/Login</url-pattern>

</servlet-mapping>

或者不配置web.xml在servlet中寫註解:

@WebServlet("/servlet/Login")

配置fliter可以在web.xml中這樣寫:

<filter>

<filter-name>LoginFilter</filter-name>

<filter-class>com.zy.filter.UserLoginFilter</filter-class>

</filter>

<filter-mapping>

<filter-name>LoginFilter</filter-name>

<url-pattern>/servlet/*</url-pattern>

</filter-mapping>

或者不配置web.xml在filter中寫註解:

@WebFilter(filterName="/MyFilter",urlPatterns="/servlet/*")

即在所有想過濾的servlet名字前加上「/setvlet」在過濾的時候過濾路徑就可以寫成「/servlet/*」這樣就能過濾所有的Servlet。

Ⅸ java web登錄後的各種請求在瀏覽器地址不變,過濾器該怎樣攔截每次的請求

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest)request;
if(req.getSession().getAttribute("user")==null){
req.setAttribute("error", "請你先登錄");
//非法請求才會進到這裡面,在這里保存請求的url地址,在成功登錄後再進行跳轉
req.getSession().setAttribute("goUrl", req.getRequestURL()+"?"+ req.getQueryString());
request.getRequestDispatcher("/ulogin.jsp").forward(request, response);
}

else{
chain.doFilter(request, response);
}
}
上面的代碼是過濾器中的代碼
下面的是servlet中的代碼
if(request.getSession().getAttribute("goUrl")!=null){
String url = (String)request.getSession().getAttribute("goUrl");
response.sendRedirect(url);
}
else{
response.sendRedirect("/webshopping/index.jsp");
}

Ⅹ jsp中過濾器可以攔截請求和響應嗎

過濾器可以動態地攔截請求和響應,以變換或使用包含在請求或響應中的信息。

閱讀全文

與過濾器攔截jsp請求相關的資料

熱點內容
凈水機沒有出水量怎麼辦 瀏覽:838
果蔬凈化器怎麼使用 瀏覽:83
四川正規的油煙凈化器怎麼選 瀏覽:369
污水螺旋旋轉是什麼蟲 瀏覽:133
樹脂瓦檢驗報告書 瀏覽:777
食堂污水流量計算 瀏覽:448
提升網速是要網線光貓路由器都要千兆的嗎 瀏覽:101
棉花在凈水器中起什麼作用 瀏覽:343
農村污水人均多少公斤 瀏覽:808
能率凈水器是超濾 瀏覽:875
捷達車的空氣濾芯怎麼拆下來 瀏覽:15
電壺除垢劑怎麼用 瀏覽:149
污水井道壓力是多少 瀏覽:911
養牛廢水處理怎麼調試 瀏覽:704
夢見房子里污水張氣 瀏覽:391
溫州鹿城過濾器 瀏覽:180
基層醫療廢水都應該檢測那些項 瀏覽:832
冀神怎麼換空調濾芯 瀏覽:487
天使樹脂浮雕花片 瀏覽:650
海口電廠污水處理項目 瀏覽:98