攔截JSP頁面,校驗是否已登錄詳解及實現(xiàn)代碼
攔截JSP頁面,校驗是否已登錄
最近使用struts2做項目,需要攔截JSP以校驗是否已經登,但struts2的過濾器鏈只能過濾action。后來發(fā)現(xiàn)在web.xml里可以直接增加javax.servlet.Filter實現(xiàn)類的過濾器,可以過濾JSP。請看代碼
Filter實現(xiàn)類
<span style="font-size:18px;">package com.common;
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.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginFilter extends HttpServlet implements Filter {
private static final long serialVersionUID = 1L;
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse res = (HttpServletResponse)response;
String path = req.getContextPath();
String indexPath = req.getScheme()+"://"+req.getServerName()+":"+req.getServerPort()+path+ "/pages/login.jsp";
if(req.getRequestURI().endsWith("login.jsp"))
{
chain.doFilter(request, response);
return;
}
Object loginuser = req.getSession().getAttribute("<strong><span style="color:#ff0000;">loginSession</span></strong>");
if(loginuser == null){
res.sendRedirect(indexPath);
return;
}
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
</span>
登錄方法:
<span style="font-size:18px;"> public String login()
{
Login login = new Login();
//.......校驗登錄信息
ActionContext ctx = ActionContext.getContext();
Map<String, Object> session = ctx.getSession();
session.put("<strong><span style="color:#ff0000;">loginSession</span></strong>", login);
return "success";
}</span>
web.xml配置
<filter> <filter-name>setlog</filter-name> <filter-class>com.common.LoginFilter</filter-class> </filter> <filter-mapping> <filter-name>setlog</filter-name> <url-pattern>/pages/home.jsp</url-pattern> <url-pattern>/pages/channel/*</url-pattern> <url-pattern>/pages/content/*</url-pattern> <url-pattern>/pages/product/*</url-pattern> <url-pattern>/pages/vodtask/*</url-pattern> </filter-mapping>
注意,如果頁面上使用了框架,則可能導致session超時后退出到登錄頁面,此時登錄頁面顯示在框架的某個子頁面,解決方法,在登錄頁面加入如下代碼即可。
<span style="font-size: 18px;"> <script language="javascript">
if (top != window)
top.location.href = window.location.href;
</script></span>
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關文章
Vue3源碼解讀effectScope API及實現(xiàn)原理
這篇文章主要為大家介紹了Vue3源碼解讀effectScope API及實現(xiàn)原理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-03-03
Java response響應體和文件下載實現(xiàn)原理
這篇文章主要介紹了Java response響應體和文件下載實現(xiàn)原理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-05-05
Spring-cloud Config Server的3種配置方式
這篇文章主要介紹了Spring-cloud Config Server的3種配置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09
mybatis中association和collection的使用與區(qū)別
在 MyBatis 中,<association>?和?<collection>?是用于配置結果映射中關聯(lián)關系的兩個元素,本文主要介紹了mybatis中<association>和<collection>的使用與區(qū)別,具有一定的參考價值,感興趣的可以了解一下2024-01-01
spring源碼閱讀--@Transactional實現(xiàn)原理講解
這篇文章主要介紹了spring源碼閱讀--@Transactional實現(xiàn)原理講解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09

