【web开发】☆★之Struts2自定义拦截器拦截登录

第二步:编写一个Action方法

package csg.struts2.action;/** * * @author 小夜的传说 * @2014-4-18 * @struts * @csg.struts2.action * @StrutsAction * @2014-4-18上午1:03:37 */public class StrutsAction {private String message;public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}public String execute() {message = “execute方法”;return “success”;}public String addUI() {message = “addUI方法”;return “success”;}}

<%@ page language=”java” import=”java.util.*” pageEncoding=”utf-8″%><!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”><html> <head><title>拦截器</title><meta http-equiv=”pragma” content=”no-cache”><meta http-equiv=”cache-control” content=”no-cache”><meta http-equiv=”expires” content=”0″><meta http-equiv=”keywords” content=”keyword1,keyword2,keyword3″> </head> <body><%request.getSession().setAttribute(“user”, “login”);%>用户已登录 </body></html>

第四步:配置struts.xml文件,先测试方法

<?xml version=”1.0″ encoding=”UTF-8″ ?><!DOCTYPE struts PUBLIC”-//Apache Software Foundation//DTD Struts Configuration 2.3//EN””http://struts.apache.org/dtds/struts-2.3.dtd”><struts><package namespace=”/test” extends=”struts-default”><!– 通配符形式访问action –><action method=”{1}”><result>/WEB-INF/page/success.jsp</result></action></package></struts>

第五步:部署到服务器上直接访问::8080/struts/test/list_addUI.action

会打印出addUI方法!ok,下面就是写一个拦截器了!

第六步:编写登录拦截器

package csg.struts2.interceptor;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwork2.interceptor.Interceptor;/** * * @author 小夜的传说 * @2014-4-18 * @struts * @csg.struts2.interceptor * @LoginInterceptor * @2014-4-18上午1:03:29 */public class LoginInterceptor implements Interceptor {// 方法在拦截器被垃圾回收之前调用,用来回收init方法初始化的资源public void destroy() {}// 方法在拦截器被创建之后,在对Action镜像拦截之前调用,使用这个方法主要是给拦截器做类似初始化的操作public void init() {}public String intercept(ActionInvocation invocation) throws Exception {Object user = ActionContext.getContext().getSession().get(“user”);if (user != null) {// 如果user不为null,代表用户已经登录,允许执行action中的方法 这个结果就代表返回验证通过return invocation.invoke();} else {//提示用户登录,我这里直接提示,在实际项目中,肯定会返回到登录页面ActionContext.getContext().put(“message”, “你没有登录”);return “success”;}}}

<?xml version=”1.0″ encoding=”UTF-8″ ?><!DOCTYPE struts PUBLIC”-//Apache Software Foundation//DTD Struts Configuration 2.3//EN””http://struts.apache.org/dtds/struts-2.3.dtd”><struts><package namespace=”/test” extends=”struts-default”><interceptors><interceptor/><!– 自定义一个拦截器栈,下面你拦截只需要用这个栈名字就行了 –><interceptor-stack><!– 这个是系统拦截器栈,不这样写,就是当你单独一个action引用拦截器的时候就无法使用拦截器的中的核心功能 –><interceptor-ref/><!– 这个引用你自己写的拦截器 –><interceptor-ref /></interceptor-stack></interceptors><!– 这样写的意思是 在这个package包下面的所有action方法都需要拦截器 –><default-interceptor-ref></default-interceptor-ref><!– 全局视图,这个就是说拦截到你没登录的时候提示你登录 ,你做的话可以提示返回登录界面–><global-results><result>/WEB-INF/page/message.jsp</result></global-results><!– 通配符形式访问action –><action method=”{1}”><result>/WEB-INF/page/success.jsp</result><!– 也可以这样写 ,但是这样写就比较麻烦了,假如你下面还有action,这样你就每个action都需要引用,,所以我注掉了–><!– <interceptor-ref></interceptor-ref> –></action></package></struts>

如图:

2、配置全局拦截器的优缺点<default-interceptor-ref></default-interceptor-ref>

假如,你某一个action方法需要另一个拦截器,但是其他方法不需要,这样你就需要在这个action中单独引用,注意,当你引用了这个拦截器之后,你定义的这个全局拦截器对于这个方法就会失效,所以一定要再次引用一次这个全局拦截器

3、为什么系统拦截器栈写在你定义的拦截器之前

却不去主动改变,而是放任它的生活态度。

【web开发】☆★之Struts2自定义拦截器拦截登录

相关文章:

你感兴趣的文章:

标签云: