導航:首頁 > 凈水問答 > 登錄超時過濾器filter

登錄超時過濾器filter

發布時間:2021-11-23 01:46:10

『壹』 filter過濾器配置如何不過濾一些頁面

直接添加多個文件映射啊,為每個需要進行過濾的文件都寫個映射標簽

『貳』 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 {
}
}

『叄』 判斷用戶登錄是用springmvc 攔截器還是filter

在struts2中用過filter過濾器,在springmvc中還有攔截器,它們都能過濾請求,但是到底有什麼區別呢?
一、定義

攔截器 :是在面向切面編程的就是在你的service或者一個方法,前調用一個方法,或者在方法後調用一個方法比如動態代理就是攔截器的簡單實現,在你調用方法前列印出字元串(或者做其它業務邏輯的操作),也可以在你調用方法後列印出字元串,甚至在你拋出異常的時候做業務邏輯的操作。
過濾器:是在javaweb中,你傳入的request、response提前過濾掉一些信息,或者提前設置一些參數,然後再傳入servlet或者struts的action進行業務邏輯,比如過濾掉非法url(不是login.do的地址請求,如果用戶沒有登陸都過濾掉),或者在傳入servlet或者 struts的action前統一設置字元集,或者去除掉一些非法字元.。
二、xml文件配置
1.filter
該過濾器的方法是創建一個類XXXFilter實現此介面,並在該類中的doFilter方法中聲明過濾規則,然後在配置文件web.xml中聲明他所過濾的路徑

<filter>
<filter-name>XXXFilter</filter-name>
<filter-class>
com.web.util.XXXFilter
</filter-class>
</filter>

<filter-mapping>
<filter-name>XXXFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
<filter>
<filter-name>XXXFilter</filter-name>
<filter-class>
com.web.util.XXXFilter
</filter-class>
</filter>

<filter-mapping>
<filter-name>XXXFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
2.Interceptor

它也要實現HandlerInterceptor 介面,這里只介紹方法註解配置

<!-- 攔截器 -->
<mvc:interceptors>
<!-- 多個攔截器,順序執行 -->
<mvc:interceptor>
<mvc:mapping path="/entryOrJsonController/*" /><!-- 如果不配置或/*,將攔截所有的Controller -->
<bean class="com.wy.interceptor.CommonInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
<!-- 攔截器 -->
<mvc:interceptors>
<!-- 多個攔截器,順序執行 -->
<mvc:interceptor>
<mvc:mapping path="/entryOrJsonController/*" /><!-- 如果不配置或/*,將攔截所有的Controller -->
<bean class="com.wy.interceptor.CommonInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>

三、具體區別

filter
Interceptor

多個的執行順序
根據filter mapping配置的先後順序
按照配置的順序,但是可以通過order控制順序

規范
在Servlet規范中定義的,是Servlet容器支持的
Spring容器內的,是Spring框架支持的。

使用范圍
只能用於Web程序中
既可以用於Web程序,也可以用於Application、Swing程序中。

深度
Filter在只在Servlet前後起作用
攔截器能夠深入到方法前後、異常拋出前後等

四、總結
兩者的本質區別:攔截器是基於java的反射機制的,而過濾器是基於函數回調。從靈活性上說攔截器功能更強大些,Filter能做的事情,他都能做,而且可以在請求前,請求後執行,比較靈活。Filter主要是針對URL地址做一個編碼的事情、過濾掉沒用的參數、安全校驗(比較泛的,比如登錄不登錄之類),太細的話,還是建議用interceptor。不過還是根據不同情況選擇合適的。

『肆』 校驗用戶是否登錄過濾器Filter

CheckLoginFilter net.cnki.tpi.cms.util.CheckLoginFilter redirectURL /login.jsp notCheckURLList /error.jsp;/login.jsp CheckLoginFilter /* 2、然後新創建一個CheckLoginFilter.java類,代碼如下:
/** * 校驗用戶是否已登錄過濾器 * @author lpz * */ public class CheckLoginFilter implements Filter { private FilterConfig filterConfig = null; private String redirectURL = null; private List notCheckURLList = new ArrayList(); public CheckLoginFilter() { } public void destroy() { notCheckURLList.clear(); } public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest)servletRequest; HttpServletResponse response = (HttpServletResponse)servletResponse; HttpSession session = request.getSession(); Object userInfo = session.getAttribute("userInfo"); if(!(request) && userInfo==null){ //重定向到指定頁面 response.sendRedirect(request.getContextPath() + redirectURL); }else{ //繼續響應請求 chain.doFilter(servletRequest, servletResponse); } } public void init(FilterConfig fConfig) throws ServletException { this.filterConfig = fConfig; redirectURL = filterConfig.getInitParameter("redirectURL"); String notCheckURLListStr = filterConfig.getInitParameter("notCheckURLList"); if(!MyStringUtil.isNullOrEmpty(notCheckURLListStr)){ //將字元串轉化為list notCheckURLList = MyStringUtil.convStrToList(notCheckURLListStr,";"); } } /** * 校驗當前請求是否在不過濾的列表中 * @param request * @return */ private boolean (HttpServletRequest request) { String uri = request.getServletPath() + (request.getPathInfo() == null ?

『伍』 java:怎麼在jsp頁面實現超時退出

在頁頭部分判斷session是否已經為空或這session中包含的用戶屬性是否為空,如果為空則跳轉至首頁或登錄頁。


For example:

====================


<%
StringonlySession=(String)request.getParameter("user");
%>
<scripttype="text/javascript">
varonlySession="<%=user%>";

if(onlySession=="null"||onlySession==""){
alert("用戶超時,請重新登錄!");
}

varindexPath="<c:urlvalue='/index.jsp'/>";//indexpageURL
if(window.parent){
if(window.parent.parent){
if(window.parent.parent.parent){
window.parent.parent.parent.location=indexPath;
}else{
window.parent.parent.location=indexPath;
}
}else{
window.parent.location=indexPath;
}
}else{
window.location=indexPath;
}
</script>

如whatismvc 所述一般的項目會添加過濾器,判斷是session是否為空。但如果只單純測試JSP的寫法,上面的即可。

『陸』 怎麼用過濾器管理用戶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>

『柒』 filter的使用 java 過濾器的幾種使用方法

過濾器來

過濾器是處於客戶端自與伺服器資源文件之間的一道過濾網,在訪問資源文件之前,通過一系列的過濾器對請求進行修改、判斷等,把不符合規則的請求在中途攔截或修改。也可以對響應進行過濾,攔截或修改響應。

過濾器一般用於登錄許可權驗證、資源訪問許可權控制、敏感詞彙過濾、字元編碼轉換等等操作,便於代碼重用,不必每個servlet中還要進行相應的操作。

『捌』 java filter 登錄進入死循環

沒有解釋?什麼意思?登錄進入過濾器,過濾器檢測到沒有登錄又返回登錄界面?無法進入JDBCController類?在web.xml的配置里不讓它過濾login.do就ok了。

『玖』 filter過濾器 和攔截器的區別

1、首先要明確什麼是攔截器、什麼是過濾器
1.1 什麼是攔截器:
攔截器,在AOP(Aspect-Oriented Programming)中用於在某個方法或欄位被訪問之前,進行攔截然後在之前或之後加入某些操作。攔截是AOP的一種實現策略。
在Webwork的中文文檔的解釋為——攔截器是動態攔截Action調用的對象。它提供了一種機制可以使開發者可以定義在一個action執行的前後執行的代碼,也可以在一個action執行前阻止其執行。同時也是提供了一種可以提取action中可重用的部分的方式。
談到攔截器,還有一個詞大家應該知道——攔截器鏈(Interceptor Chain,在Struts 2中稱為攔截器棧 Interceptor Stack)。攔截器鏈就是將攔截器按一定的順序聯結成一條鏈。在訪問被攔截的方法或欄位時,攔截器鏈中的攔截器就會按其之前定義的順序被調用。
1.2. 攔截器的實現原理:
大部分時候,攔截器方法都是通過代理的方式來調用的。Struts 2的攔截器實現相對簡單。當請求到達Struts 2的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);

}
}

閱讀全文

與登錄超時過濾器filter相關的資料

熱點內容
污水提升器配蹲便怎麼安裝 瀏覽:287
苯銨廢水處理 瀏覽:115
樹膠樹脂有什麼 瀏覽:760
大金有冷凝水提升泵嗎 瀏覽:775
doit過濾 瀏覽:17
潤滑油濾芯生意怎麼樣 瀏覽:894
家用反滲透純水機怎麼接管子 瀏覽:602
天龍國產14檔變速箱濾芯怎麼換 瀏覽:955
edi膜塊回收 瀏覽:591
廢水治理的前景概括 瀏覽:972
昌吉反滲透水處理 瀏覽:913
公司的污水處理費怎麼做賬 瀏覽:467
2018年內蒙古反滲透膜招標信息 瀏覽:288
山崎蒸餾所標 瀏覽:237
化工水處理葯水 瀏覽:451
ro反滲透膜75加侖 瀏覽:277
如何打掃房間的污水 瀏覽:338
桑塔納3000空調濾芯在什麼位置 瀏覽:1
美國人怎麼處理養殖污水 瀏覽:591
霍尼韋爾濾芯怎麼換 瀏覽:116