您的位置:首页 > 编程语言 > Java开发

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 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;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: