導航:首頁 > 凈水問答 > spring內置過濾器

spring內置過濾器

發布時間:2021-10-27 22:33:57

㈠ java問題: 在過濾器filter中如何獲得spring容器里的對象

WebApplicationContext wac =
WebApplicationContextUtils.(getServletContext());
有WebApplicationContext 了對象了 spring託管的所有對象都可以拿到了。
當然不推薦這種方式,一般是注入的方式,特殊情況下(像你這種情況)這么用。
然後調用 wac.getBean(「beanid」);

㈡ spring中怎麼實現過濾器和監聽器

1、延遲載入過濾器

Hibernate 允許對關聯對象、屬性進行延遲載入,但是必須保證延遲載入的操作限於同一個 Hibernate Session 范圍之內進行。如果 Service 層返回一個啟用了延遲載入功能的領域對象給 Web 層,當 Web 層訪問到那些需要延遲載入的數據時,由於載入領域對象的 Hibernate Session 已經關閉,這些導致延遲載入數據的訪問異常。

Spring 為此專門提供了一個 OpenSessionInViewFilter 過濾器,它的主要功能是使每個請求過程綁定一個 Hibernate Session,即使最初的事務已經完成了,也可以在 Web 層進行延遲載入的操作。

<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>*.html</url-pattern>
</filter-mapping>

2、亂碼過濾器

對post亂碼的處理,如下

<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter①Spring編輯過濾器
</filter-class>
<init-param>②編碼方式
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>③強制進行編碼轉換
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>②過濾器的匹配URL
<filter-name>encodingFilter</filter-name>
<url-pattern>*.html</url-pattern>
</filter-mapping>

3、請求跟蹤日誌過濾器

程度調試者可以詳細地查看到有哪些請求被調用,請求的參數是什麼,請求是否正確返回等信息,需要將log4j設為debug

org.springframework.web.filter.: 該過濾器將請求的 URI 記錄到 Common 日誌中


4、WebAppRootListener

可以將 Web 應用根目錄添加到系統參數中,對應的屬性名可以通過名為「webAppRootKey」的 Servlet 上下文參數指定,默認為「webapp.root」,配置如下

<context-param>
<param-name>webAppRootKey</param-name>
<param-value>baobaotao.root</param-value>①Web應用根目錄以該屬性名添加到系統參數中
</context-param>

②負責將Web應用根目錄以webAppRootKey上下文參數指定的屬性名添加到系統參數中
<listener>
<listener-class>
org.springframework.web.util.WebAppRootListener
</listener-class>
</listener>

5、Log4jConfigListener監聽器

包括了 WebAppRootListener 的功能,也就是說,Log4jConfigListener 會自動完成將 Web 應用根目錄以 webAppRootKey 上下文參數指定的屬性名添加到系統參數中,在log4j.xml可以直接使用


6、Introspector 緩存清除監聽器

負責處理由 JavaBean Introspector 功能而引起的緩存泄露。IntrospectorCleanupListener 監聽器在 Web 應用關閉的時會負責清除 JavaBean Introspector 的緩存,在 web.xml 中注冊這個監聽器可以保證在 Web 應用關閉的時候釋放與其相關的 ClassLoader 的緩存和類引用。

㈢ spring mvc 有過濾器嗎

有如下幾種
1. 使用spring mvc resource 去讀取靜態文件
比如在 WEN-INF 下建立static 文件夾,並在 static 文件夾裡面建立css 文件夾,然後建立 1.css 文件.
修改 mvc-dispatcher-servlet.xml 文件
程序代碼
<mvc:resources mapping="/static/**" location="/WEB-INF/static/"/>

2. 採用 default servlet
在 web.xml 裡面配置
程序代碼
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/static/*</url-pattern>
</servlet-mapping>

這樣做了之後,所有前綴為static 的請求都交給default servlet 去處理。如果請求 your-ip:port/your-app/static/css/1.css ,就表示在 webcontent 目錄下的css文件夾下的1.css文件。

3. 通過文件擴展名進行處理
在 web.xml 裡面配置
程序代碼

<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.png</url-pattern>
<url-pattern>*.js</url-pattern>
<url-pattern>*.css</url-pattern>
</servlet-mapping>

㈣ spring mvc 過濾器有幾種

1. 使用spring mvc resource 去讀取靜態文件
比如在 WEN-INF 下建立static 文件夾,並在 static 文件夾裡面建立css 文件夾,然後建立 1.css 文件.
修改 mvc-dispatcher-servlet.xml 文件
程序代碼

<mvc:resources mapping="/static/**" location="/WEB-INF/static/"/>

這樣配置之後,可以通過 http://your-ip:port/your-app/static/css/1.css 直接訪問了。

2. 採用 default servlet
在 web.xml 裡面配置
程序代碼

<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/static/*</url-pattern>
</servlet-mapping>

這樣做了之後,所有前綴為static 的請求都交給default servlet 去處理。如果你請求 http://your-ip:port/your-app/static/css/1.css ,就表示在 webcontent 目錄下的css文件夾下的1.css文件。

3. 通過文件擴展名進行處理
在 web.xml 裡面配置
程序代碼

<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.png</url-pattern>
<url-pattern>*.js</url-pattern>
<url-pattern>*.css</url-pattern>
</servlet-mapping>

4. 對spring servlet 不用restful 風格。在url 上加上前綴
程序代碼

<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>/app</url-pattern>
</servlet-mapping>

這樣做的目的是讓 dispatchservlet 去攔截以/app 開頭的那些 URL,並不攔截css,js等。

5. 對spring servlet 不用restful 風格。在url 上加上後綴
程序代碼

<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>

這樣做的目的是讓 dispatchservlet 只攔截*.do 的url. 並不攔截css,js等。

上面介紹的5種方法,根據情況自己任意選擇一種,現在沒辦法說那種好,那種方法不好,都有可取之處,用在不同的場景而已。

㈤ SpringMVC的攔截器和過濾器的區別與聯系

1、首先要明確什麼是攔截器、什麼是過濾器
1.1 什麼是攔截器:
攔截器,在AOP(Aspect-Oriented Programming)中用於在某個方法或欄位被訪問之前,進行攔截然後在之前或之後加入某些操作。攔截是AOP的一種實現策略。
在Webwork的中文文檔的解釋為——攔截器是動態攔截Action調用的對象。它提供了一種機制可以使開發者可以定義在一個action執行的前後執行的代碼,也可以在一個action執行前阻止其執行。同時也是提供了一種可以提取action中可重用的部分的方式。
談到攔截器,還有一個詞大家應該知道——攔截器鏈(Interceptor Chain,在Struts2中稱為攔截器棧 Interceptor Stack)。攔截器鏈就是將攔截器按一定的順序聯結成一條鏈。在訪問被攔截的方法或欄位時,攔截器鏈中的攔截器就會按其之前定義的順序被調用。
1.2. 攔截器的實現原理:
大部分時候,攔截器方法都是通過代理的方式來調用的。Struts2的攔截器實現相對簡單。當請求到達Struts2的ServletDispatcher時,Struts 2會查找配置文件,並根據其配置實例化相對的攔截器對象,然後串成一個列表(list),最後一個一個地調用列表中的攔截器。
1.3 什麼是過濾器
過濾器是一個程序,它先於與之相關的servlet或JSP頁面運行在伺服器上。過濾器可附加到一個或多個servlet或JSP頁面上,並且可以檢查進入這些資源的請求信息。在這之後,過濾器可以作如下的選擇:
①以常規的方式調用資源(即,調用servlet或JSP頁面)。
②利用修改過的請求信息調用資源。
③調用資源,但在發送響應到客戶機前對其進行修改。
④阻止該資源調用,代之以轉到其他的資源,返回一個特定的狀態代碼或生成替換輸出。

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

2、攔截器與過濾器的區別 :
1. 攔截器是基於java的反射機制的,而過濾器是基於函數回調。
2. 攔截器不依賴與servlet容器,過濾器依賴與servlet容器。
3. 攔截器只能對action請求起作用,而過濾器則可以對幾乎所有的請求起作用。
4. 攔截器可以訪問action上下文、值棧里的對象,而過濾器不能訪問。
5. 在action的生命周期中,攔截器可以多次被調用,而過濾器只能在容器初始化時被調用一次

攔截器的代碼實現(以struts2為例):
1、在xml文件中如何定義攔截器
<interceptors>
<interceptor name="filterIPInterceptor"
class="com.xxxx.web.FilterIPActionInterceptor" />
<interceptor-stack name="filterIPStack">
<interceptor-ref name="defaultStack" />

<interceptor-ref name="filterIPInterceptor" />
</interceptor-stack>
</interceptors>

2、怎麼遍別寫自定義攔截器

public class FilterIPActionInterceptor extends AbstractInterceptor
{
/** 日誌控制. */
private final Log log = LogFactory.getLog(getClass());

/**
* @see com.opensymphony.xwork2.interceptor.AbstractInterceptor#intercept(com.opensymphony.xwork2.ActionInvocation)
*/
@Override
@SuppressWarnings("unchecked")
public String intercept(ActionInvocation invocation) throws Exception
{
String result = null;
// 獲得當前方法名.
String methodName = invocation.getInvocationContext().getName();
String currIp = null;
try
{
if (invocation.getAction() instanceof PortletAction)
{
PortletAction action = (PortletAction) invocation.getAction();
currIp = action.getRequest().getRemoteAddr();
}
String ip = ApplicationResource.getHotValue("ALLOW_CACHE_IP");

if (StringUtils.isBlank(ip) || StringUtils.isBlank(currIp))
{
log.error("允許刷新的IP不存在或當前請求的IP非法.");
throw new NoAllowIPException();
}
else
{
String[] ips = ip.split(",");
boolean errorIp = true;
for (String s : ips)
{
if (s.equals(currIp))
errorIp = false;
}
// 判斷IP
if (errorIp)
throw new NoAllowIPException();
}
result = invocation.invoke();//調用被攔截的方法
}
catch (Exception e)
{
log.error("異常類名:" + invocation.getAction().getClass());
log.error("異常方法:" + methodName, e);
throw e;
}

return result;
}

}

3、怎麼編寫過濾器

1、在web.xml裡面配置自定義的攔截器
<filter>
<filter-name>Redirect Filter</filter-name>
<filter-class>com.xx.filter.RedirectFilter</filter-class>
</filter>

<filter-mapping>
<filter-name>Redirect Filter</filter-name>
<url-pattern>/xx/xx/*</url-pattern>

</filter-mapping>

2、如何編寫自定義的攔截器
public class RedirectFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) throws IOException, ServletException {
// 獲取URL
Long startTime = null;
if (log.isDebugEnabled())
{
startTime = System.currentTimeMillis();
}
HttpServletRequest httpRequest = (HttpServletRequest) request;
String url = httpRequest.getRequestURL().toString();
if (url == null || url.trim().length() == 0) {
return;
}
if (url.indexOf(luceneCreateMapping) != -1
|| url.indexOf(luceneSearchMapping) != -1) {
doFilterForxxx(request, response, url);
} else {
doxxxx(request, response, url);
}
if (log.isDebugEnabled())
{
long endTime = System.currentTimeMillis();
Thread currentThread = Thread.currentThread();
String threadName = currentThread.getName();
log.debug("[" + threadName + "]" + "< "
+ this.getClass().getName() + " " + url + " "
+ (endTime - startTime) + " ms");
}
// 激活下一個Filter
filterChain.doFilter(request, response);

}
}

㈥ javaee 各組件獲取spring的方法 以及web的內置對象

spring struts的過濾器,看struts的過濾器的方法中的參數了沒有。

如果要使用注入,在配置過濾器的時候,一個方法
web.xml

<filter>
<filter-name>我的過濾器</filter-name>
<filter-class>
org.springframework.web.filter.DelegatingFilterProxy
</filter-class>
<init-param>
<param-name>targetBeanName</param-name>
<param-value>過濾器名字</param-value>

</init-param>
<init-param>
<param-name>targetFilterLifecycle</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>DelegatingFilterProxy</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

㈦ spring過濾器和攔截器的區別

(1)過濾器:

依賴於servlet容器,是JavaEE標准,是在請求進入容器之後,還未進入Servlet之前進行預處理,並且在請求結束返回給前端這之間進行後期處理。在實現上基於函數回調,可以對幾乎所有請求進行過濾,但是缺點是一個過濾器實例只能在容器初始化時調用一次。使用過濾器的目的是用來做一些過濾操作,獲取我們想要獲取的數據,比如:在過濾器中修改字元編碼;在過濾器中修改HttpServletRequest的一些參數,包括:過濾低俗文字、危險字元等

關於過濾器的一些用法可以參考我寫過的這些文章:

㈧ spring攔截器和過濾器的區別

區別總結如下:
使用范圍不同 Filter 是Servlet 規定的.只能用於web 程序.而攔截器專既可以用於Web 程序,也可以用於Apllicatioon,Swing程序中屬。
規范不同:Filter是在Servlet 規范定義的,是Servlet容器支持的。而攔截器是在Spring 容器內的,Spring 框架所支持的。
使用資源不同:同其他代碼塊一樣,攔截器也是一個Spring的組件,歸Spring 管理。配置在Spring 中,因此能使用Spring 中的任何資源,對象,例如Service對象,數據源,事務管理等。通過Ioc注入到攔截器即可。而filter 則不能。
深度不同:Filter 只在Servlet前後起作用,而攔截器能深入到方法前後,異常拋出前後因而攔截器的使用具有更大的彈性,所以在spring 中優先使用攔截器。

㈨ spring中配置過濾器的一個疑問。

嗯 ...樓主說的很明白,業務類(ServiceIMP)及注入,調用 都沒有問題

既然項目中加入了filter 那麼就是通過spring在filter注入bean

將filter注入Spring 而不是單純的把業務類注入生成getter setter,讓filter調用就可以了。在spring中,filter被納入了bean 管理機制。

如Spring注入過濾器配置

<bean id="myFilter" class="com.MyFilter"> //指名具體的filter類
<property name="service"> //需要注入的具體參數
<ref bean="service"/>
</property>
</bean>

這樣吧 這有個簡單實例,給你參考一下:
http://www.iwangyu.com/index.php/archives/309

如果只憑配置信息看不明白,還有個簡單的例子你看一下:
http://hi..com/anglee2010/blog/item/bc51ab3f11ffc13371cf6c28.html

應該差不多了...

工作日可以隨時 Hi 我

㈩ springmvc4基於java config怎麼配置字元過濾器

http://hanqunfeng.iteye.com/blog/2114967

閱讀全文

與spring內置過濾器相關的資料

熱點內容
ro反滲透膜75加侖 瀏覽:277
如何打掃房間的污水 瀏覽:338
桑塔納3000空調濾芯在什麼位置 瀏覽:1
美國人怎麼處理養殖污水 瀏覽:591
霍尼韋爾濾芯怎麼換 瀏覽:116
路由器設置了mac過濾可以破解嗎 瀏覽:450
3m和愛惠浦超濾 瀏覽:921
德州樹脂工藝品製作技術培訓 瀏覽:878
家用反滲透和超濾膜哪個好 瀏覽:336
寶寶喝了除水垢 瀏覽:923
反滲透膜出了黑水是怎麼回事 瀏覽:187
濃水反滲透怎麼補救 瀏覽:872
廢水的化學法 瀏覽:972
慶鈴汽車的空調濾芯在哪裡視頻 瀏覽:173
現在廣州回長春用隔離嗎 瀏覽:786
水垢是鹼嗎 瀏覽:212
凈水器的泵頭有什麼作用 瀏覽:103
馬六空調濾芯用什麼品牌 瀏覽:731
安吉爾凈水器哪吒和V3哪個好 瀏覽:173
朗逸的空氣濾芯為什麼有洞 瀏覽:807