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>
这样就实现了对登录的拦截
时间: 2024-10-10 22:10:17