Struts拦截器
filter:对所有的东西都过滤。.css,.js,.jpg。
interceptor:对action拦截。struts工具。
一、拦截器配置。
第一步:创建一个类,让其继承自AbstractInterceptor
第二步:配置struts.xml
1.添加<interceptors>配置节,添加拦截器配置。
2.在action中引用,<interceptors>中的配置。
注意:
1.在action中需要添加defaultStack引用
2.在建<interceptors>可以建立stack,把defaultStack也添加在里面,在引用的时候引用此stack即可。
二、在拦截器中使用内置对象。
1.ActionContext 获取Map.
2.ServletActionContext 获取HttpSession
3.实现SessionAware接口
三、使用拦截器实现登录身份验证。
有两个action是不能拦截。打回登录界面action,登录提交验证并写 session的action
在登录验证的auth方法中,分两种情况:
1.第一次登录验证。此时,session中没有信息,需要向session中添加登录信息
2.非第一次登录验证。此时,session中有信息,不需要再入session中添加信息
验证 autentication
授权 authorization
首先做个action:
package com.itnba.maya.controller;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.struts2.interceptor.SessionAware;
import com.itnba.maya.DAO.User;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
public class LoginAction extends ActionSupport implements ModelDriven<User>,SessionAware{
private Map<String, Object> session = new HashMap<String, Object>();
public Map<String, Object> getSession() {
return session;
}
private User user = new User();
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String login(){
return SUCCESS;
}
public String auth(){
List<String> uid = new ArrayList<String>(); //模拟从数据库接收数据
uid.add("zhangsan");
uid.add("lisi");
uid.add("wangwu");
uid.add("zhaoliu");
Object obj = session.get("user");
if(obj == null){ //判断是不是第一次进login
if(uid.contains(user.getUsername())){ //判断输入的账号是不是已注册的账号
session.put("user", user.getUsername());
return SUCCESS;
}
else{
return "login_error";
}
}
else{
return SUCCESS;
}
}
@Override
public User getModel() {
return user;
}
@Override
public void setSession(Map<String, Object> arg0) {
this.session = arg0;
}
}
然后在做一个拦截器:
package com.itnba.maya.util;
import java.util.HashMap;
import java.util.Map;
import org.apache.struts2.interceptor.SessionAware;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public class MyIntreceptor extends AbstractInterceptor{
private Map<String, Object> session;
@Override
public String intercept(ActionInvocation arg0) throws Exception {
System.out.println("intercept is running");
session = ActionContext.getContext().getSession();
if(session.get("user") == null){
return "login_error";
}
return arg0.invoke(); //继续往下走
}
}
配置strust2.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>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />
<constant name="struts.ui.theme" value="simple"></constant>
<package name="default" namespace="/" extends="struts-default">
<interceptors>
<interceptor name="myinterceptor" class="com.itnba.maya.util.MyIntreceptor"></interceptor>
<interceptor-stack name="myStack">
<interceptor-ref name="myinterceptor"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<action name="Login_login" class="com.itnba.maya.controller.LoginAction" method="login"> //这是给登录界面
<result>
/Login/login.jsp
</result>
</action>
<action name="Login_auth" class="com.itnba.maya.controller.LoginAction" method="auth"> //这是登录之后的结果界面
<result>
/Login/auth.jsp
</result>
<result name="login_error">
/Login/login.jsp
</result>
</action>
<action name="*_*" class="com.itnba.maya.controller.{1}Action" method="{2}"> //这是拦截其他的页面
<interceptor-ref name="myStack"></interceptor-ref>
<result>
/{1}/{2}.jsp
</result>
<result name="login_error">
/Login/login.jsp
</result>
</action>
</package>
</struts>
这样就实现了对登录的拦截
原文:http://www.cnblogs.com/dnf1612/p/6580407.html