Intercept the JSP page and verify whether it is logged in
Recently, I used struts2 to do a project and needed to intercept JSP to verify whether it has been logged, but struts2's filter chain can only filter actions. Later I found that in web.xml, the filter of the javax.servlet.Filter implementation class can be directly added to filter JSP. Please see the code
Filter implementation class
<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.httpServlet; import javax.servlet.httpServlet; import javax.servlet. 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> Login method:
<span style="font-size:18px;"> public String login() { Login login = new Login(); //.....Check login information 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 configuration
<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>
Note that if a frame is used on the page, it may cause the session to time out and log out to the login page. At this time, the login page is displayed on a subpage of the frame. Solution: Add the following code to the login page.
<span style="font-size: 18px;"> <script language="javascript"> if (top != window) top.location.href = window.location.href; </script></span>
Thank you for reading, I hope it can help you. Thank you for your support for this site!