struts2中使用拦截器(Interceptor)控制登录和权限

Elsevier投稿别再踩坑了!手把手教你搞定LaTeX模板和所有附件(附避坑清单) 本文详细解析Elsevier投稿全流程中的关键环节,特别是LaTeX模板的使用和系统提交的常见问题。从必备文件准备到LaTeX模板适配,再到投稿系统操作指南,提供全面的避坑清单和实用技巧,帮助科研工作者高效完成投稿,避免因格式错误或文件遗漏导致的退稿风险。 阅读详情
struts2中使用拦截器(Interceptor)控制登录和权限
转载:http://www.itpub.net/thread-966462-1-1.html

在jsp servlet中我们通常使用Servlet Filter控制用户是否登入, 是否有权限转到某个页面。在struts2中我们应该会想到他的拦截器(Interceptor), Interceptor在struts2中起着非常重要的作用。 很多struts2中的功能都是使用Interceptor实现的。

需求:简单的登入界面,让用户输入用户名、密码、记住密码(remember me)。 如果用户选中remember me的话, 下次就不需要再登入了(使用cookie实现, 用需要点击logout取消remeber me功能)。 如果用户起始输入的地址不是登入页面的话,在用户登入之后需要转到用户输入的起始地址。

我们先看看LoginInterceptor.java
Java代码
Java代码   收藏代码
  1. package com.javaeye.dengyin2000.wallet.interceptor;     
  2.     
  3. import java.util.Map;     
  4.     
  5. import javax.servlet.http.Cookie;     
  6. import javax.servlet.http.HttpServletRequest;     
  7.     
  8. import org.apache.commons.lang.StringUtils;     
  9. import org.apache.struts2.StrutsStatics;     
  10.     
  11. import com.javaeye.dengyin2000.wallet.dao.UserDAO;     
  12. import com.javaeye.dengyin2000.wallet.dao.UserNotFoundException;     
  13. import com.javaeye.dengyin2000.wallet.domains.User;     
  14. import com.opensymphony.xwork2.ActionContext;     
  15. import com.opensymphony.xwork2.ActionInvocation;     
  16. import com.opensymphony.xwork2.interceptor.AbstractInterceptor;     
  17.     
  18. public class LoginInterceptor extends AbstractInterceptor {     
  19.     public static final String USER_SESSION_KEY="wallet.session.user";     
  20.     public static final String COOKIE_REMEMBERME_KEY="wallet.cookie.rememberme";     
  21.     public static final String GOING_TO_URL_KEY="GOING_TO";     
  22.          
  23.     private UserDAO userDao;     
  24.     
  25.     @Override    
  26.     public String intercept(ActionInvocation invocation) throws Exception {     
  27.              
  28.         ActionContext actionContext = invocation.getInvocationContext();     
  29.         HttpServletRequest request= (HttpServletRequest) actionContext.get(StrutsStatics.HTTP_REQUEST);     
  30.              
  31.         Map session = actionContext.getSession();     
  32.         if (session != null && session.get(USER_SESSION_KEY) != null){     
  33.             return invocation.invoke();     
  34.         }     
  35.              
  36.         Cookie[] cookies = request.getCookies();     
  37.         if (cookies!=null) {     
  38.             for (Cookie cookie : cookies) {     
  39.                 if (COOKIE_REMEMBERME_KEY.equals(cookie.getName())) {     
  40.                     String value = cookie.getValue();     
  41.                     if (StringUtils.isNotBlank(value)) {     
  42.                         String[] split = value.split("==";     
  43.                         String userName = split[0];     
  44.                         String password = split[1];     
  45.                         try {     
  46.                             User user = userDao     
  47.                                     .attemptLogin(userName, password);     
  48.                             session.put(USER_SESSION_KEY, user);     
  49.                         } catch (UserNotFoundException e) {     
  50.                             setGoingToURL(session, invocation);     
  51.                             return "login";     
  52.                         }     
  53.                     } else {     
  54.                         setGoingToURL(session, invocation);     
  55.                         return "login";     
  56.                     }     
  57.                     return invocation.invoke();     
  58.                 }     
  59.             }     
  60.         }     
  61.         setGoingToURL(session, invocation);     
  62.         return "login";     
  63.     }     
  64.     
  65.     private void setGoingToURL(Map session, ActionInvocation invocation){     
  66.         String url = "";     
  67.         String namespace = invocation.getProxy().getNamespace();     
  68.         if (StringUtils.isNotBlank(namespace) && !namespace.equals("/"){     
  69.             url = url + namespace;     
  70.         }     
  71.         String actionName = invocation.getProxy().getActionName();     
  72.         if (StringUtils.isNotBlank(actionName)){     
  73.             url = url + "/" + actionName + ".action";     
  74.         }     
  75.         session.put(GOING_TO_URL_KEY, url);     
  76.     }     
  77.          
  78.     public UserDAO getUserDao() {     
  79.         return userDao;     
  80.     }     
  81.     
  82.     public void setUserDao(UserDAO userDao) {     
  83.         this.userDao = userDao;     
  84.     }     
  85.     
  86. }    
  87.   
  88. package com.javaeye.dengyin2000.wallet.interceptor;  
  89.   
  90. import java.util.Map;  
  91.   
  92. import javax.servlet.http.Cookie;  
  93. import javax.servlet.http.HttpServletRequest;  
  94.   
  95. import org.apache.commons.lang.StringUtils;  
  96. import org.apache.struts2.StrutsStatics;  
  97.   
  98. import com.javaeye.dengyin2000.wallet.dao.UserDAO;  
  99. import com.javaeye.dengyin2000.wallet.dao.UserNotFoundException;  
  100. import com.javaeye.dengyin2000.wallet.domains.User;  
  101. import com.opensymphony.xwork2.ActionContext;  
  102. import com.opensymphony.xwork2.ActionInvocation;  
  103. import com.opensymphony.xwork2.interceptor.AbstractInterceptor;  
  104.   
  105. public class LoginInterceptor extends AbstractInterceptor {  
  106.         public static final String USER_SESSION_KEY="wallet.session.user";  
  107.         public static final String COOKIE_REMEMBERME_KEY="wallet.cookie.rememberme";  
  108.         public static final String GOING_TO_URL_KEY="GOING_TO";  
  109.           
  110.         private UserDAO userDao;  
  111.   
  112.         @Override  
  113.         public String intercept(ActionInvocation invocation) throws Exception {  
  114.                   
  115.                 ActionContext actionContext = invocation.getInvocationContext();  
  116.                 HttpServletRequest request= (HttpServletRequest) actionContext.get(StrutsStatics.HTTP_REQUEST);  
  117.                   
  118.                 Map session = actionContext.getSession();  
  119.                 if (session != null && session.get(USER_SESSION_KEY) != null){  
  120.                         return invocation.invoke();  
  121.                 }  
  122.                   
  123.                 Cookie[] cookies = request.getCookies();  
  124.                 if (cookies!=null) {  
  125.                         for (Cookie cookie : cookies) {  
  126.                                 if (COOKIE_REMEMBERME_KEY.equals(cookie.getName())) {  
  127.                                         String value = cookie.getValue();  
  128.                                         if (StringUtils.isNotBlank(value)) {  
  129.                                                 String[] split = value.split("==";  
  130.                                                 String userName = split[0];  
  131.                                                 String password = split[1];  
  132.                                                 try {  
  133.                                                         User user = userDao  
  134.                                                                         .attemptLogin(userName, password);  
  135.                                                         session.put(USER_SESSION_KEY, user);  
  136.                                                 } catch (UserNotFoundException e) {  
  137.                                                         setGoingToURL(session, invocation);  
  138.                                                         return "login";  
  139.                                                 }  
  140.                                         } else {  
  141.                                                 setGoingToURL(session, invocation);  
  142.                                                 return "login";  
  143.                                         }  
  144.                                         return invocation.invoke();  
  145.                                 }  
  146.                         }  
  147.                 }  
  148.                 setGoingToURL(session, invocation);  
  149.                 return "login";  
  150.         }  
  151.   
  152.         private void setGoingToURL(Map session, ActionInvocation invocation){  
  153.                 String url = "";  
  154.                 String namespace = invocation.getProxy().getNamespace();  
  155.                 if (StringUtils.isNotBlank(namespace) && !namespace.equals("/"){  
  156.                         url = url + namespace;  
  157.                 }  
  158.                 String actionName = invocation.getProxy().getActionName();  
  159.                 if (StringUtils.isNotBlank(actionName)){  
  160.                         url = url + "/" + actionName + ".action";  
  161.                 }  
  162.                 session.put(GOING_TO_URL_KEY, url);  
  163.         }  
  164.           
  165.         public UserDAO getUserDao() {  
  166.                 return userDao;  
  167.         }  
  168.   
  169.         public void setUserDao(UserDAO userDao) {  
  170.                 this.userDao = userDao;  
  171.         }  
  172.   
  173. }  

首先判断session中有没有用户信息, 如果有的话继续, 如果没有的话,检查cookie中有没有rememberme的值,如果有的话,用==分割, 取得用户名密码进行登入。如果没有这个用户的话,记录下request的action地址然后转到登入页面。如果验证有这个用户,则继续下面的interceptor。 如果cookie中没有信息的话,则记录request的action地址然后转到登入页面。 以上就是LoginInterceptor的全部代码。

下面我们看看struts.xml

Java代码
Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>     
  2.     
  3. <!DOCTYPE struts PUBLIC      
  4.     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"    
  5.     "http://struts.apache.org/dtds/struts-2.0.dtd">     
  6.     
  7. <struts>     
  8.     <package name="default" extends="struts-default">     
  9.         <interceptors>     
  10.             <interceptor name="loginInterceptor" class="loginInterceptor"></interceptor>     
  11.             <interceptor-stack name="loginDefaultStack">     
  12.                 <interceptor-ref name="loginInterceptor"></interceptor-ref>     
  13.                 <interceptor-ref name="defaultStack"></interceptor-ref>     
  14.             </interceptor-stack>     
  15.         </interceptors>     
  16.         <default-interceptor-ref name="loginDefaultStack"></default-interceptor-ref>     
  17.         <global-results>     
  18.             <result name="login" type="redirect">/login.jsp</result>     
  19.         </global-results>          
  20.         <action name="index" class="indexAction">     
  21.             <result>/index.jsp</result>     
  22.         </action>     
  23.         <action name="logout" class="logoutAction"></action>     
  24.              
  25.         <action name="login" class="loginAction" method="login">     
  26.             <result type="redirect">${goingToURL}</result>     
  27.             <result name="input">/login.jsp</result>     
  28.             <interceptor-ref name="defaultStack"></interceptor-ref>     
  29.         </action>     
  30.              
  31.         <action name="register" class="registerAction">     
  32.             <result type="redirect">/login.jsp</result>     
  33.             <result name="input">/register.jsp</result>     
  34.             <interceptor-ref name="defaultStack"></interceptor-ref>     
  35.         </action>     
  36.     </package>     
  37. </struts>    
  38.   
  39. <?xml version="1.0" encoding="UTF-8"?>  
  40.   
  41. <!DOCTYPE struts PUBLIC   
  42.     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
  43.     "http://struts.apache.org/dtds/struts-2.0.dtd">  
  44.   
  45. <struts>  
  46.         <package name="default" extends="struts-default">  
  47.                 <interceptors>  
  48.                         <interceptor name="loginInterceptor" class="loginInterceptor"></interceptor>  
  49.                         <interceptor-stack name="loginDefaultStack">  
  50.                                 <interceptor-ref name="loginInterceptor"></interceptor-ref>  
  51.                                 <interceptor-ref name="defaultStack"></interceptor-ref>  
  52.                         </interceptor-stack>  
  53.                 </interceptors>  
  54.                 <default-interceptor-ref name="loginDefaultStack"></default-interceptor-ref>  
  55.                 <global-results>  
  56.                         <result name="login" type="redirect">/login.jsp</result>  
  57.                 </global-results>                  
  58.                 <action name="index" class="indexAction">  
  59.                         <result>/index.jsp</result>  
  60.                 </action>  
  61.                 <action name="logout" class="logoutAction"></action>  
  62.                   
  63.                 <action name="login" class="loginAction" method="login">  
  64.                         <result type="redirect">${goingToURL}</result>  
  65.                         <result name="input">/login.jsp</result>  
  66.                         <interceptor-ref name="defaultStack"></interceptor-ref>  
  67.                 </action>  
  68.                   
  69.                 <action name="register" class="registerAction">  
  70.                         <result type="redirect">/login.jsp</result>  
  71.                         <result name="input">/register.jsp</result>  
  72.                         <interceptor-ref name="defaultStack"></interceptor-ref>  
  73.                 </action>  
  74.         </package>  
  75. </struts>  

我们是使用的默认的interceptor stack是loginInterceptor, 如果你需要让不登入的用户也能访问的话,你需要配置你的action使用defaultStack。 我们这里的login, register使用的就是defaultStack。 这里要注意的是success的result是我们用LoginInterceptor设过来的值。 这样我们就能够转到用户输入的起始页面。 下面我们再来看看login.jsp 和 loginAction

Java代码
Jsp代码   收藏代码
  1. <%@taglib prefix="s" uri="/struts-tags" %>     
  2. <%@ page language="java" contentType="text/html; charset=UTF-8"    
  3.     pageEncoding="UTF-8"%>     
  4. <html>     
  5. <head>     
  6.     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">     
  7.     <title>Wallet-Login</title>     
  8. </head>     
  9. <body>     
  10. <h2>Login</h2>      
  11. <s:actionmessage/>     
  12. <s:actionerror/>     
  13. <s:form action="login" method="post" validate="false" theme="xhtml">     
  14. <s:textfield name="loginName" label="Username"></s:textfield><br/>     
  15. <sassword name="password" label="Password"></sassword><br/>     
  16. <s:checkbox label="Remember Me" name="rememberMe"></s:checkbox>     
  17. <s:submit value="%{'Login'}"></s:submit>      
  18. </s:form>     
  19. <a href="register.jsp">Register</a>     
  20. </body>     
  21. </html>    
  22.   
  23. <%@taglib prefix="s" uri="/struts-tags" %>  
  24. <%@ page language="java" contentType="text/html; charset=UTF-8"  
  25.     pageEncoding="UTF-8"%>  
  26. <html>  
  27. <head>  
  28.         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  29.         <title>Wallet-Login</title>  
  30. </head>  
  31. <body>  
  32. <h2>Login</h2>   
  33. <s:actionmessage/>  
  34. <s:actionerror/>  
  35. <s:form action="login" method="post" validate="false" theme="xhtml">  
  36. <s:textfield name="loginName" label="Username"></s:textfield><br/>  
  37. <sassword name="password" label="Password"></sassword><br/>  
  38. <s:checkbox label="Remember Me" name="rememberMe"></s:checkbox>  
  39. <s:submit value="%{'Login'}"></s:submit>   
  40. </s:form>  
  41. <a href="register.jsp">Register</a>  
  42. </body>  
  43. </html>  

Java代码
Java代码   收藏代码
  1. package com.javaeye.dengyin2000.wallet.actions;     
  2.     
  3. import java.util.Map;     
  4.     
  5. import javax.servlet.http.Cookie;     
  6. import javax.servlet.http.HttpServletRequest;     
  7. import javax.servlet.http.HttpServletResponse;     
  8.     
  9. import org.apache.commons.lang.StringUtils;     
  10. import org.apache.struts2.interceptor.CookiesAware;     
  11. import org.apache.struts2.interceptor.ServletRequestAware;     
  12. import org.apache.struts2.interceptor.ServletResponseAware;     
  13. import org.apache.struts2.interceptor.SessionAware;     
  14.     
  15. import com.javaeye.dengyin2000.wallet.dao.UserDAO;     
  16. import com.javaeye.dengyin2000.wallet.dao.UserNotFoundException;     
  17. import com.javaeye.dengyin2000.wallet.domains.User;     
  18. import com.javaeye.dengyin2000.wallet.interceptor.LoginInterceptor;     
  19. import com.opensymphony.xwork2.ActionSupport;     
  20.     
  21. public class LoginAction extends ActionSupport implements ServletResponseAware, ServletRequestAware, SessionAware, CookiesAware{     
  22.     
  23.     private UserDAO userDao;     
  24.     private String loginName;     
  25.     private String password;     
  26.     private boolean rememberMe;     
  27.     private HttpServletResponse response;     
  28.     private HttpServletRequest request;     
  29.     private Map session;     
  30.     private Map cookies;     
  31.     private String goingToURL;     
  32.     public String getGoingToURL() {     
  33.         return goingToURL;     
  34.     }     
  35.     public void setGoingToURL(String goingToURL) {     
  36.         this.goingToURL = goingToURL;     
  37.     }     
  38.     public boolean isRememberMe() {     
  39.         return rememberMe;     
  40.     }     
  41.     public void setRememberMe(boolean rememberMe) {     
  42.         this.rememberMe = rememberMe;     
  43.     }     
  44.     public String getLoginName() {     
  45.         return loginName;     
  46.     }     
  47.     public void setLoginName(String loginName) {     
  48.         this.loginName = loginName;     
  49.     }     
  50.     public String getPassword() {     
  51.         return password;     
  52.     }     
  53.     public void setPassword(String password) {     
  54.         this.password = password;     
  55.     }     
  56.          
  57.          
  58.     public String login()throws Exception{     
  59.         try {     
  60.             User user = userDao.attemptLogin(loginName, password);     
  61.             if (rememberMe){     
  62.                 Cookie cookie = new Cookie(LoginInterceptor.COOKIE_REMEMBERME_KEY, user.getLoginName() + "==" + user.getPassword());     
  63.                 cookie.setMaxAge(60 * 60 * 24 * 14);     
  64.                 response.addCookie(cookie);     
  65.             }     
  66.             session.put(LoginInterceptor.USER_SESSION_KEY, user);     
  67.             String goingToURL = (String) session.get(LoginInterceptor.GOING_TO_URL_KEY);     
  68.             if (StringUtils.isNotBlank(goingToURL)){     
  69.                 setGoingToURL(goingToURL);     
  70.                 session.remove(LoginInterceptor.GOING_TO_URL_KEY);     
  71.             }else{     
  72.                 setGoingToURL("index.action";     
  73.             }     
  74.             return SUCCESS;     
  75.         } catch (UserNotFoundException e) {     
  76.             addActionMessage("user name or password is not corrected.";     
  77.             return INPUT;     
  78.         }     
  79.     }     
  80.     public UserDAO getUserDao() {     
  81.         return userDao;     
  82.     }     
  83.     public void setUserDao(UserDAO userDao) {     
  84.         this.userDao = userDao;     
  85.     }     
  86.     public void setServletResponse(HttpServletResponse response) {     
  87.         this.response = response;     
  88.     }     
  89.     public void setServletRequest(HttpServletRequest request) {     
  90.         this.request = request;     
  91.     }     
  92.     public void setSession(Map session) {     
  93.         this.session = session;     
  94.     }     
  95.     public void setCookiesMap(Map cookies) {     
  96.         this.cookies = cookies;     
  97.     }     
  98. }    
  99.   
  100. package com.javaeye.dengyin2000.wallet.actions;  
  101.   
  102. import java.util.Map;  
  103.   
  104. import javax.servlet.http.Cookie;  
  105. import javax.servlet.http.HttpServletRequest;  
  106. import javax.servlet.http.HttpServletResponse;  
  107.   
  108. import org.apache.commons.lang.StringUtils;  
  109. import org.apache.struts2.interceptor.CookiesAware;  
  110. import org.apache.struts2.interceptor.ServletRequestAware;  
  111. import org.apache.struts2.interceptor.ServletResponseAware;  
  112. import org.apache.struts2.interceptor.SessionAware;  
  113.   
  114. import com.javaeye.dengyin2000.wallet.dao.UserDAO;  
  115. import com.javaeye.dengyin2000.wallet.dao.UserNotFoundException;  
  116. import com.javaeye.dengyin2000.wallet.domains.User;  
  117. import com.javaeye.dengyin2000.wallet.interceptor.LoginInterceptor;  
  118. import com.opensymphony.xwork2.ActionSupport;  
  119.   
  120. public class LoginAction extends ActionSupport implements ServletResponseAware, ServletRequestAware, SessionAware, CookiesAware{  
  121.   
  122.         private UserDAO userDao;  
  123.         private String loginName;  
  124.         private String password;  
  125.         private boolean rememberMe;  
  126.         private HttpServletResponse response;  
  127.         private HttpServletRequest request;  
  128.         private Map session;  
  129.         private Map cookies;  
  130.         private String goingToURL;  
  131.         public String getGoingToURL() {  
  132.                 return goingToURL;  
  133.         }  
  134.         public void setGoingToURL(String goingToURL) {  
  135.                 this.goingToURL = goingToURL;  
  136.         }  
  137.         public boolean isRememberMe() {  
  138.                 return rememberMe;  
  139.         }  
  140.         public void setRememberMe(boolean rememberMe) {  
  141.                 this.rememberMe = rememberMe;  
  142.         }  
  143.         public String getLoginName() {  
  144.                 return loginName;  
  145.         }  
  146.         public void setLoginName(String loginName) {  
  147.                 this.loginName = loginName;  
  148.         }  
  149.         public String getPassword() {  
  150.                 return password;  
  151.         }  
  152.         public void setPassword(String password) {  
  153.                 this.password = password;  
  154.         }  
  155.           
  156.           
  157.         public String login()throws Exception{  
  158.                 try {  
  159.                         User user = userDao.attemptLogin(loginName, password);  
  160.                         if (rememberMe){  
  161.                                 Cookie cookie = new Cookie(LoginInterceptor.COOKIE_REMEMBERME_KEY, user.getLoginName() + "==" + user.getPassword());  
  162.                                 cookie.setMaxAge(60 * 60 * 24 * 14);  
  163.                                 response.addCookie(cookie);  
  164.                         }  
  165.                         session.put(LoginInterceptor.USER_SESSION_KEY, user);  
  166.                         String goingToURL = (String) session.get(LoginInterceptor.GOING_TO_URL_KEY);  
  167.                         if (StringUtils.isNotBlank(goingToURL)){  
  168.                                 setGoingToURL(goingToURL);  
  169.                                 session.remove(LoginInterceptor.GOING_TO_URL_KEY);  
  170.                         }else{  
  171.                                 setGoingToURL("index.action";  
  172.                         }  
  173.                         return SUCCESS;  
  174.                 } catch (UserNotFoundException e) {  
  175.                         addActionMessage("user name or password is not corrected.";  
  176.                         return INPUT;  
  177.                 }  
  178.         }  
  179.         public UserDAO getUserDao() {  
  180.                 return userDao;  
  181.         }  
  182.         public void setUserDao(UserDAO userDao) {  
  183.                 this.userDao = userDao;  
  184.         }  
  185.         public void setServletResponse(HttpServletResponse response) {  
  186.                 this.response = response;  
  187.         }  
  188.         public void setServletRequest(HttpServletRequest request) {  
  189.                 this.request = request;  
  190.         }  
  191.         public void setSession(Map session) {  
  192.                 this.session = session;  
  193.         }  
  194.         public void setCookiesMap(Map cookies) {  
  195.                 this.cookies = cookies;  
  196.         }  
  197. }  
  198.   
  199.   
  200. 差不多就是这么多代码了。 最后看看logoutAction   
  201.   
  202. Java代码   
  203. package com.javaeye.dengyin2000.wallet.actions;     
  204.     
  205. import javax.servlet.http.Cookie;     
  206. import javax.servlet.http.HttpServletRequest;     
  207. import javax.servlet.http.HttpServletResponse;     
  208. import javax.servlet.http.HttpSession;     
  209.     
  210. import org.apache.struts2.interceptor.ServletRequestAware;     
  211. import org.apache.struts2.interceptor.ServletResponseAware;     
  212.     
  213. import com.javaeye.dengyin2000.wallet.interceptor.LoginInterceptor;     
  214. import com.opensymphony.xwork2.ActionSupport;     
  215.     
  216. public class LogoutAction extends ActionSupport implements ServletRequestAware , ServletResponseAware{     
  217.     
  218.     private HttpServletRequest request;     
  219.     private HttpServletResponse response;     
  220.     
  221.     public String execute() throws Exception{     
  222.         HttpSession session = request.getSession(false);     
  223.         if (session!=null)     
  224.             session.removeAttribute(LoginInterceptor.USER_SESSION_KEY);     
  225.              
  226.         Cookie[] cookies = request.getCookies();     
  227.         if (cookies!=null) {     
  228.             for (Cookie cookie : cookies) {     
  229.                 if (LoginInterceptor.COOKIE_REMEMBERME_KEY.equals(cookie     
  230.                         .getName())) {     
  231.                     cookie.setValue("";     
  232.                     cookie.setMaxAge(0);     
  233.                     response.addCookie(cookie);     
  234.                     return "login";     
  235.                 }     
  236.             }     
  237.         }     
  238.         return "login";     
  239.     }     
  240.     
  241.     public void setServletRequest(HttpServletRequest request) {     
  242.         this.request = request;     
  243.     }     
  244.     
  245.     public void setServletResponse(HttpServletResponse response) {     
  246.         this.response = response;     
  247.     }     
  248.     
  249. }    
  250.   
  251. package com.javaeye.dengyin2000.wallet.actions;  
  252.   
  253. import javax.servlet.http.Cookie;  
  254. import javax.servlet.http.HttpServletRequest;  
  255. import javax.servlet.http.HttpServletResponse;  
  256. import javax.servlet.http.HttpSession;  
  257.   
  258. import org.apache.struts2.interceptor.ServletRequestAware;  
  259. import org.apache.struts2.interceptor.ServletResponseAware;  
  260.   
  261. import com.javaeye.dengyin2000.wallet.interceptor.LoginInterceptor;  
  262. import com.opensymphony.xwork2.ActionSupport;  
  263.   
  264. public class LogoutAction extends ActionSupport implements ServletRequestAware , ServletResponseAware{  
  265.   
  266.         private HttpServletRequest request;  
  267.         private HttpServletResponse response;  
  268.   
  269.         public String execute() throws Exception{  
  270.                 HttpSession session = request.getSession(false);  
  271.                 if (session!=null)  
  272.                         session.removeAttribute(LoginInterceptor.USER_SESSION_KEY);  
  273.                   
  274.                 Cookie[] cookies = request.getCookies();  
  275.                 if (cookies!=null) {  
  276.                         for (Cookie cookie : cookies) {  
  277.                                 if (LoginInterceptor.COOKIE_REMEMBERME_KEY.equals(cookie  
  278.                                                 .getName())) {  
  279.                                         cookie.setValue("";  
  280.                                         cookie.setMaxAge(0);  
  281.                                         response.addCookie(cookie);  
  282.                                         return "login";  
  283.                                 }  
  284.                         }  
  285.                 }  
  286.                 return "login";  
  287.         }  
  288.   
  289.         public void setServletRequest(HttpServletRequest request) {  
  290.                 this.request = request;  
  291.         }  
  292.   
  293.         public void setServletResponse(HttpServletResponse response) {  
  294.                 this.response = response;  
  295.         }  
  296.   
  297. }  
  298.   
  299. 这里需要注意的是需要把cookie也清理下。   
  300.   
  301. applicationContext-struts.xml   
  302. Java代码   
  303. <?xml version="1.0" encoding="UTF-8"?>     
  304. <!DOCTYPE beans PUBLIC      
  305.     "-//SPRING//DTD BEAN//EN"      
  306.     "http://www.springframework.org/dtd/spring-beans.dtd">     
  307.          
  308. <beans>     
  309.     <!-- Example of SAF2 action instantiated by Spring -->     
  310.     <!-- bean id="helloWorldAction" class="tutorial.HelloWorldAction" singleton="false" />     
  311.      -->     
  312.      <bean id="indexAction" class="com.javaeye.dengyin2000.wallet.actions.IndexAction" singleton="false"></bean>     
  313.      <bean id="loginAction" class="com.javaeye.dengyin2000.wallet.actions.LoginAction" singleton="false">     
  314.         <property name="userDao" ref="userDao" />     
  315.      </bean>     
  316.           
  317.      <bean id="logoutAction" class="com.javaeye.dengyin2000.wallet.actions.LogoutAction" singleton="false"></bean>     
  318.           
  319.      <bean id="registerAction" class="com.javaeye.dengyin2000.wallet.actions.RegisterAction" singleton="false"></bean>     
  320.           
  321.      <!-- the following is struts2 interceptors -->     
  322.      <bean id="loginInterceptor" class="com.javaeye.dengyin2000.wallet.interceptor.LoginInterceptor">     
  323.         <property name="userDao" ref="userDao" />     
  324.      </bean>     
  325.           
  326.      <bean id="userDao" class="com.javaeye.dengyin2000.wallet.dao.UserDAOImpl">     
  327.      </bean>     
  328. </beans> 
万字详解YOLOv8网络结构Backbone/neck/head以及Conv、Bottleneck、C2f、SPPF、Detect等模块 YOLOv8是由Ultralytics开发的最先进的目标检测模型,推升了速度、准确性和用户友好性的界限。YOLO这一缩写代表“你只看一次”(You Only Look Once),通过在一次网络传递中同时预测所有边界框,提升了算法的效率和实时处理能力。相比之下,其他一些目标检测技术需要经过多个阶段或过程来完成检测。YOLOv8在流行的YOLOv5架构上进行了扩展,在多个方面提供了改进。 阅读详情

相关推荐

OFDM基本原理

OFDM基础介绍,包括OFDM的核心思想,数学推导了OFDM信号的调制解调过程。

伊丽莎白的学习之路 8906

在struts2中使用拦截器(Interceptor)控制登录和权限

<br />在jsp servlet中我们通常使用Servlet Filter控制用户是否登入, 是否有权限转到某个页面。在struts2中我们应该会想到他的拦截器(Interceptor), Interceptor在struts2中起着非常重要的作用。 很多struts2中的功能都是使用Interceptor实现的。 <br /><br /> 需求:简单的登入界面,让用户输入用户名、密码、记住密码(remember me)。 如果用户选中remember me的话, 下次就不需要再登入了(使用cooki

sol929的专栏 314

vscode远程连接deepin出错:过程试图写入的管道不存在的解决方法

背景:昨天我用vscode使用ssh远程开发还处于正常状态,今天刚打开电脑,并启动deepin,再次使用vscode重新连接就出现异常。意思就是22号默认端口连接被拒绝,所以要先确定ssh是否连接。3.重新进入vscode里面,重新连接,如图成功连接。,查看port后面的端口号是不是22号。1.检查sshd是否启动。

qq_43573047的博客 2946

Struts2之拦截器

struts2拦截器简单示例

Never_Give_Up_Lin 531

ComfyUI破限版全中文AI绘画环境搭建与工作流实战指南

节点式工作流是AI绘画领域的核心技术架构,通过将图像生成过程拆分为可配置的模块化节点,实现了对Stable Diffusion模型的精细化控制。其技术原理基于数据流编程范式,每个节点负责特定功能处理,如文本编码、采样器配置和VAE解码等。这种设计在工程实践中的核心价值在于提供了可追溯、可复用的可视化工作流,特别适合需要参数调优和批量生产的商业场景。ComfyUI作为典型的节点式AI绘画工具,在破限版中针对中文用户优化了界面支持和显卡兼容性,显著降低了技术门槛。在实际应用中,结合ControlNet和LoRA

weixin_29038155的博客 446

用ST25DV芯片+KiCad快速设计NFC标签天线:参数计算/脚本生成/实测优化全流程

本文详细介绍了使用ST25DV芯片和KiCad工具设计NFC标签天线的全流程,包括参数计算、脚本生成和实测优化。通过解析芯片等效工作原理和设计思路,帮助开发者避开常见陷阱,实现高效、可量产的天线设计。文章还提供了Python计算工具和KiCad自动化脚本,大幅提升设计效率和成功率。

jj890的博客 757

struts2利用拦截器(Interceptor)判断用户是否登录

在struts2中,很重要的一个知识点就是拦截器,拦截器在action前后都会执行,主要是针对action的。因此我想到用拦截器来判断用户是否登录,当然这不是一个很好判断用户是否登录的方法,但是我希望可以通过这个例子,来增强对拦截器的认识。 1.自定义一个拦截器 public class ValidateInterceptor extends AbstractInterceptor { ...

yeliner的博客 876

C++/WinRT入门指南:现代Windows原生开发的核心技术

Windows运行时(WinRT)是微软为现代Windows应用开发设计的一套跨语言API框架,它基于COM技术原理构建,提供了统一的二进制接口标准。这项技术的核心价值在于让开发者能够以原生性能调用系统级功能,同时保持跨语言兼容性。在工程实践中,C++/WinRT作为官方推荐的C++语言投影,通过标准C++语法封装WinRT API,显著降低了开发复杂度。特别是在异步编程场景中,结合C++20协程特性,能够大幅提升代码可读性和维护性。对于需要高性能图形处理、系统集成或跨平台兼容的桌面应用开发,掌握C++/W

weixin_33910191的博客 1196

struts2拦截器不执行问题

struts2自定义拦截器的配置博文很多,但按一些文章中配置好自定义拦截器后,设置为默认拦截器栈,拦截器方法intercept()却未被调用的问题,原因多种,以下为我问题的解决方式: 配置struts2.xml加上 原来其他项目中同样的配置却没出现不能被执行的问题,xml配置都差不多,可能深层问题在于action中注解的各项配置引发,有空再验证。 参考:http://struts

zhb200621的专栏 1020

ANSYS MAXWELL内置式永磁同步电机(IPMSM)转矩最大时输入电流相位的确定

1.在转子转速为零时看一个周期内的转矩变化

qq_41752507的博客 6516

13、离散时间系统建模与分析

本文系统介绍了离散时间系统的建模与分析方法,涵盖连续时间模型的离散化过程、系统稳定性判断准则、输入输出模型转换方法以及有限脉冲响应和阶跃响应模型的应用。通过多个示例详细展示了不同系统在离散化过程中的特性变化,并探讨了采样间隔对系统动态特性的影响。此外,文章还分析了时间延迟的处理方法,并总结了关键知识点及操作步骤,为离散时间系统的实际应用提供了理论基础和实践指导。

2w3e4r5t6y的博客 188

struts ajax不跳转页面,struts2 拦截器 跳转页面 ajax

当前位置:我的异常网» 热门搜索»struts2 拦截器 跳转页面 ajaxstruts2 拦截器 跳转页面 ajaxwww.myexceptions.net网友分享于:2013-01-21搜索量:108次场景:struts2拦截器中,发现session过期,怎么在拦截到的ajax请求后跳转页面struts2拦截器中,发现session过期,如何在拦截到的ajax请求后跳转页面日前遇...

weixin_39915700的博客 485

图像处理入门007:图像处理中的数学基础:线性代数与卷积

一种:把 OpenCV 当黑盒,调用,效果不对就乱调参数;另一种:理解每个像素是怎么被周围邻域"加权平均"的,理解核翻转、边界填充、stride 的含义。前者能干活,后者能解难题。一旦遇到自定义核(比如 ISP 上的锐化)、深度学习反向传播、医学图像重建,你就必须把卷积、相关、矩阵乘法这些基本功捡回来。线性代数三件套:向量点积、矩阵乘法、线性变换;2D 卷积的数学定义:核翻转、滑动窗口、边界填充。并手写一个,验证它与和的结果完全一致(误差 < 1e-9)。f∗gn∑m−∞∞f。

专注:太空算力、AI infra、异构调度、大模型成本工程 385

Struts2中使用拦截器(Interceptor)控制登录和权限

        在jsp Servlet中我们通常使用Servlet Filter控制用户是否登入, 是否有权限转到某个页面。在Struts2中我们应该会想到他的拦截器(Interceptor), Interceptor在Struts2中起着非常重要的作用。 很多Struts2中的功能都是使用Interceptor实现的。 需求:简单的登入界面,让用户输入用户名、密码、记住密码(remember ...

訫誶 157

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

在​s​t​r​u​t​s​2​中​使​用​拦​截​器​(​I​n​t​e​r​c​e​p​t​o​r​)​控​制​登​录​和​权​限

在 jsp servlet 中我们通常使用 Servlet Filter 控制用户是否登入,   是否有权限转到某个页面。 在 struts2 中我们应该会想到他的拦截器( Interceptor ),   Interceptor 在 struts2 中起着非 常重要的作用。   很多 struts2 中的功能都是使用 Interceptor 实现的。

tfy1332的专栏 1380

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

struts学习-使用拦截器控制登陆权限拦截

jsp: 简单的一个登陆页面。 <%-- Created by IntelliJ IDEA. User: bin Date: 2020-07-02 Time: 13:23 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false"

binLi_Cheng的博客 360

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

上一篇: ActionContext.getContext()详解
下一篇: struts2执行流程
randomnet
博客等级 码龄19年 59粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值