struts2登陆拦截器(如果未登陆则返回登陆页)
2012-09-18 11:06
302 查看
1.拦截器
拦截器(interceptor)是Struts2最强大的特性之一,拦截器可以让你在Action和result被执行之前或之后进行一些处理。同时,拦截器也可以让你将通用的代码模块化并作为可重用的类。Struts2中的很多特性都是由拦截器来完成的。例如params拦截器将HTTP请求中的参数解析出来,并设置为Action的属性。servlet-config拦截器直接将HTTP请求中的HttpServletRequest对象化HttpServletResponse对象传给Action。
Struts2中内置类许多的拦截器,它们提供了许多Struts2的核心功能和可选的高级特性。这些内置的拦截器在struts-default.xml中配置。只有配置了拦截器,拦截器才可以正常的工作和运行。在struts-default.xml中拦截器的配置片段为:
① package将属性abstract设置为true,代表此package为一个抽象的package。抽象package和非抽象package的区别在于抽象的package中不能配置action。
② name属性指定拦截器的名字,class属性指定拦截器的完全限定名。
③ 多个拦截器可以组成拦截器栈。name属性为拦截器栈的名字。
④ 指定当前package的默认拦截器(栈)。当前指定的默认拦截器栈为defaultStack,该拦截器栈是Struts2运行的一个基本拦截器栈,一般我们不用在自己配置它,因为在大多数情况下,我们自定义的package是继承自struts-default这个package的。
2.登陆拦截器的配置
2.1先写一个intercept类
2.2 struts.xml中的配置
2.3 struts-project.xml中的配置
2.4 AppAction.java
2.4 ProjectAction.java
拦截器(interceptor)是Struts2最强大的特性之一,拦截器可以让你在Action和result被执行之前或之后进行一些处理。同时,拦截器也可以让你将通用的代码模块化并作为可重用的类。Struts2中的很多特性都是由拦截器来完成的。例如params拦截器将HTTP请求中的参数解析出来,并设置为Action的属性。servlet-config拦截器直接将HTTP请求中的HttpServletRequest对象化HttpServletResponse对象传给Action。
Struts2中内置类许多的拦截器,它们提供了许多Struts2的核心功能和可选的高级特性。这些内置的拦截器在struts-default.xml中配置。只有配置了拦截器,拦截器才可以正常的工作和运行。在struts-default.xml中拦截器的配置片段为:
<package name="struts-default" abstract="true"> ① <interceptors> <interceptor name="alias" class="com.opensymphony.xwork2.interceptor.AliasInterceptor"/> ② <interceptor name="autowiring" class="com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterceptor"/> //…其他拦截器配置 <interceptor-stack name="defaultStack"> ③ <interceptor-ref name="exception"/> <interceptor-ref name="alias"/> <interceptor-ref name="servletConfig"/> <interceptor-ref name="i18n"/> //…其他拦截器的引用 </interceptor-stack> </interceptors> <default-interceptor-ref name="defaultStack"/> ④ </package>
① package将属性abstract设置为true,代表此package为一个抽象的package。抽象package和非抽象package的区别在于抽象的package中不能配置action。
② name属性指定拦截器的名字,class属性指定拦截器的完全限定名。
③ 多个拦截器可以组成拦截器栈。name属性为拦截器栈的名字。
④ 指定当前package的默认拦截器(栈)。当前指定的默认拦截器栈为defaultStack,该拦截器栈是Struts2运行的一个基本拦截器栈,一般我们不用在自己配置它,因为在大多数情况下,我们自定义的package是继承自struts-default这个package的。
2.登陆拦截器的配置
2.1先写一个intercept类
package com.kaishengit.intercepter; import java.util.Map; import com.kaishengit.entity.Employee; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.AbstractInterceptor; public class LoginValidate extends AbstractInterceptor{ private static final long serialVersionUID = 1L; @Override public String intercept(ActionInvocation invocation) throws Exception { String namespace = invocation.getProxy().getNamespace(); String actionName = invocation.getProxy().getActionName(); if(("/".equals(namespace) && "toLogin".equals(actionName)) || ("/".equals(namespace) && "login".equals(actionName))){ return invocation.invoke(); } else { Map<String, Object> session = ActionContext.getContext().getSession(); Employee e = (Employee) session.get("cur_user"); if(e == null) { return "login"; } else { return invocation.invoke(); } } } }
2.2 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> <include file="struts-project.xml"></include> <package name="mydefault" extends="struts-default" abstract="true"> <!-- 添加拦截器 --> <interceptors> <!-- 添加登陆拦截器 --> <interceptor name="loginValidate" class="com.kaishengit.intercepter.LoginValidate"/> <!-- 新建一个站,把登陆拦截器和默认的站放进去 --> <interceptor-stack name="mystack"> <interceptor-ref name="defaultStack"/> <interceptor-ref name="loginValidate"/> </interceptor-stack> </interceptors> <!-- 修改默认拦截器 --> <default-interceptor-ref name="mystack"/> <!-- 将result设置为全局的,这样就不用在每一个package里面都添加拦截器了 --> <global-results> <result name="login" type="redirectAction"> <param name="actionName">toLogin</param> <param name="namespace">/</param> <param name="code">1002</param> </result> </global-results> </package> <package name="mypackage" extends="mydefault" namespace="/"> <action name="toLogin" class="com.kaishengit.action.AppAction"> <result>/WEB-INF/views/index.jsp</result> </action> <action name="login" class="com.kaishengit.action.AppAction" method="login"> <result type="redirectAction"> <param name="actionName">list</param> <param name="namespace">/project</param> </result> <result name="login" type="redirectAction"> <param name="actionName">toLogin</param> <param name="code">${code}</param> </result> </action> </package> </struts>
2.3 struts-project.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 name="projectPackage" extends="mydefault" namespace="/project"> <action name="list" class="com.kaishengit.action.ProjectAction"> <result>/WEB-INF/views/project/main.jsp</result> </action> </package> </struts>
2.4 AppAction.java
package com.kaishengit.action; import java.util.Map; import org.apache.struts2.interceptor.SessionAware; import com.kaishengit.entity.Employee; import com.kaishengit.service.EmployeeService; public class AppAction implements SessionAware{ private Employee employee; private Map<String, Object> session; private String code ; EmployeeService es = new EmployeeService(); public String execute(){ return "success"; } public String login(){ Employee e = es.login(employee); if(e != null) { session.put("cur_user", e); return "success"; } else { code = "1001"; return "login"; } } //get set public Employee getEmployee() { return employee; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public void setEmployee(Employee employee) { this.employee = employee; } public void setSession(Map<String, Object> session) { this.session = session; } }
2.4 ProjectAction.java
package com.kaishengit.action; import java.util.List; import java.util.Map; import org.apache.struts2.interceptor.SessionAware; import com.kaishengit.entity.Employee; import com.kaishengit.entity.Project; import com.kaishengit.service.ProjectService; public class ProjectAction implements SessionAware{ private Map<String, Object> session; private List<Project> list; ProjectService ps = new ProjectService(); public String execute(){ Employee e = (Employee) session.get("cur_user"); list = ps.findById(e.getId()); return "success"; } //get set public void setSession(Map<String, Object> session) { this.session = session; } public List<Project> getList() { return list; } public void setList(List<Project> list) { this.list = list; } }
相关文章推荐
- struts2拦截器中 如果获取当前请求action 和请求的方法
- struts2_全局的拦截器,拦截用户非法登陆
- Struts2自定义拦截器实例—登陆权限验证
- struts2登陆拦截器 (FIX)
- struts2登陆拦截器
- struts2拦截器起作用了,但是返回的登录页面在右侧的mainframe中打开了
- Struts2自定义拦截器实例—登陆权限验证
- Struts2 拦截器的使用,验证是否已经登陆
- struts2登陆拦截器
- Struts2自己定义拦截器实例—登陆权限验证
- Struts2自己定义拦截器实例—登陆权限验证
- Struts2 自定义拦截器实例—登陆权限验证
- Struts2自定义拦截器实例—登陆权限验证+验证框架
- struts2使用拦截器完成登陆显示用户信息操作和Struts2的国际化
- struts2使用拦截器完成登陆显示用户信息操作
- struts2拦截器验证登陆状态
- Struts2自定义拦截器实例—登陆权限验证
- struts2自定义拦截器一——模拟登陆权限验证
- Struts2自定义拦截器实例—登陆权限验证
- 简单的Struts2的Interceptors(拦截器)机制介绍以及利用拦截器实现用户登陆时执行耗时操作并自动跳转的实例