Jimmy小站
小明也有大梦想 — 蒋明/铭struts2 的拦截器 (interceptor)
2016-05-08 / 未分类 / 4164 次围观 / 0 次吐槽首先是在struts.xml中配置好拦截器(interceptors->interceptor),然后将一组完成组合任务的拦截器配置成拦截器栈(interceptor-stack)。
最后在需要这个拦截器栈的Action中加入 interceptor-ref。同时我们还能设置全局默认的拦截器(default-interceptor-ref),在设置了全局默认拦截器之后,若是某些特殊的Action不需要任何拦截器,可在该Action下定义一个(<interceptor-ref name="defaultStack"/>),在Action中定义了拦截器将会覆盖全局默认拦截器。而该拦截器是最基础的拦截器,不做任何处理。最终相关配置如下。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="struts-global" extends="struts-default">
<interceptors>
<!-- 自定义一个拦截器,检查session中是否有登录信息 -->
<interceptor name="authorLogin" class="authorLogin"/>
<!-- 加入必须的default拦截器组 组成完整自定义拦截器(如果不这样,会无法获取参数) -->
<interceptor-stack name="loginInterceptorStack">
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="authorLogin"/>
</interceptor-stack>
</interceptors>
<!-- 默认全部都需要经过的拦截器,用于验证用户是否登录,尚未登录的不能访问相关信息 -->
<default-interceptor-ref name="loginInterceptorStack"/>
<!-- 全局 result, 要是在自己的action中找不到result时,会在这个全局result中寻找 -->
<global-results>
<result name="errHandler" type="redirect">/error.jsp</result>
<result name="noSession" type="redirect">/loginPage.jsp</result>
</global-results>
<!-- 关联异常类,如发生异常则返回一个 errHandler字串,然后寻找全局result获得error.jsp页面返回 -->
<global-exception-mappings>
<exception-mapping result="errHandler" exception="java.lang.Exception" />
</global-exception-mappings>
</package>
<package name="default" namespace="/" extends="struts-default,struts-global">
<!-- 登录相关Action -->
<action name="login_*" class="login" method="{1}">
<result name="success">/index.jsp</result>
<result name="error">/loginPage.jsp</result>
<result name="loginPage">/loginPage.jsp</result>
<!-- 加入defalutStack后,覆盖全局默认拦截器,
即不需要session也能执行,因为登录操作完成之前肯定是没有session的 -->
<interceptor-ref name="defaultStack"/>
</action>
<!-- 文件上传相关Action -->
<action name="upload_*" class="upload" method="{1}">
<result name="page">/uploadPage.jsp</result>
<result name="success">/uploadPage.jsp</result>
</action>
</package>
</struts>该项目使用了Spring,所以所有类都交由Spring管理了,下面贴出applicationContext.xml与相关类的实现
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd" xmlns:tx="http://www.springframework.org/schema/tx"> <bean id="login" class="net.share.action.LoginAction" /> <bean id="upload" class="net.share.action.UploadAction" /> <bean id="authorLogin" class="net.share.action.AuthorizationInterceptor" /> </beans>
LoginAction.java
package net.share.action;
import net.share.model.ComUser;
import net.share.service.UserService;
import net.share.service.UserServiceImpl;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
public class LoginAction extends ActionSupport implements ModelDriven<ComUser> {
/**
*
*/
private static final long serialVersionUID = 1L;
ComUser user = new ComUser();
String loginInfo;
@Override
public ComUser getModel() {
return user;
}
public String getLoginInfo() {
return loginInfo;
}
public void setLoginInfo(String loginInfo) {
this.loginInfo = loginInfo;
}
@Override
public String execute() throws Exception {
System.out.println("LoginAction-execute...");
return "loginPage";
}
public String loginPage(){
System.out.println("LoginAction-loginPage...");
return "loginPage";
}
public String doLogin() throws Exception{
System.out.println("LoginAction-doLogin...");
System.out.println(user.getUserName()+"==="+user.getPassword());
UserService uService = new UserServiceImpl();
ComUser user2 = uService.getUserByName(user.getUserName());
//System.out.println(user2.getPassword());
if (user2 != null && user.getPassword().equals(user2.getPassword())) {
//System.out.println("success");
ActionContext.getContext().getSession().put("user", user);
loginInfo = SUCCESS;
return SUCCESS;
} else if (user2 == null) {
loginInfo = "用户不存在!";
} else {
loginInfo = "用户密码错误!";
}
System.out.println("error");
loginInfo = ERROR;
return ERROR;
}
}AuthorizationInterceptor.java
package net.share.action;
import net.share.model.ComUser;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
public class AuthorizationInterceptor implements Interceptor{
private static final long serialVersionUID = 1L;
@Override
public void destroy() {
System.out.println("AuthorizationInterceptor destroy...");
}
@Override
public void init() {
System.out.println("AuthorizationInterceptor init...");
}
@Override
public String intercept(ActionInvocation invocation) throws Exception {
System.out.println("AuthorizationInterceptor intercept...");
ComUser user = (ComUser) ActionContext.getContext().getSession().get("user");
if (user != null) {
return invocation.invoke();
}
return "error";
}
}推荐您阅读更多有关于“struts2,interceptor,”的文章
本月热文
Copyright © Jimmy小站 Allrights Reserved.备案号:桂ICP备 15005996
额 本文暂时没人评论 来添加一个吧
发表评论