Struts2拦截器配置(简单的登陆后的权限验证)
简单登陆后的权限验证
1.UserAction
public String login(){ //为防止用户重复提交同一请求(当直接在地址栏输入请求时,) session=context.getSession();//首先获取session User userSession=(User)session.get("user"); if(userSession==null){//如果没有获取到session,return SUCCESS; if(user!=null){//继续判断,用户是否传递了参数 if(new UserDao().login(user)){//继续判断,如果用户名密码正确 session.put("user", user);//将用户信息放到session中 return SUCCESS; }else{ error="用户名或密码错误";//如果用户名不正确,显示一下错误信息, return "error"; } }else{ error="用户名或密码错误";//没有传递参数,在界面显示一下错误信息, return "error"; } }else{ return SUCCESS;//如果获取到session,return SUCCESS; } }
2.Struts.xml中拦截器的配置信息
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name="struts.enable.DynamicMethodInvocation" value="false" /><!-- 动态方法激发,默认是false --> <constant name="struts.devMode" value="true" /><!-- 跟踪,生成很多调试信息,开发时写为true --> <package name="default" extends="struts-default"> <!-- 用户登录拦截器配置 --> <!-- 定义一个拦截器 --> <interceptors> <!-- 拦截器位置(自定义的拦截器类) --> <interceptor name="userInterceptor" class="com.maya.interceptor.UserInterceptor"></interceptor> <!-- 为方便自定义的拦截器栈(我们可以把自定义的多个拦截器,放到这里面,然后直接调用该拦截器栈即可) --> <interceptor-stack name="myStack"> <interceptor-ref name="userInterceptor"></interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> </interceptor-stack> </interceptors> <!-- 使当前包的所有请求,都会被拦截器拦截,当然有些公共页面是不需要拦截的,所以就在其中加上 <interceptor-ref name="defaultStack"></interceptor-ref> --> <default-interceptor-ref name="myStack"></default-interceptor-ref> <!-- result全局配置错误页面,一般每个action都是需要一个错误界面的 --> <global-results> <result name="error">error.jsp</result> </global-results><!-- 用户的登陆请求 --> <action name="User_login" class="com.maya.interceptor.UserAction" method="login"> <result name="success" type="redirectAction"> <param name="actionName">Info_findall</param> </result> <result name="error">User_login.jsp</result> <interceptor-ref name="defaultStack"></interceptor-ref> <!-- 排除当前请求受到拦截器的影响 --> </action> </package> </struts>
3.拦截器
package com.maya.interceptor; import java.util.Map; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.Interceptor; public class UserInterceptor implements Interceptor {除了实现Iterceptor接口外,我们还可以继承AbstractInterceptor这个类,实现其中的intercept(ActionInvocation invocation)方法即可 @Override public void destroy() { //销毁方法 } @Override public void init() { //初始化方法 } @Override public String intercept(ActionInvocation invocation) throws Exception { ActionContext context=invocation.getInvocationContext();//获取Context上下文 Map<String, Object> session=context.getSession();//获取session User user=(User)session.get("user");//判断是否登陆 String result=null; if(user==null){ result="error"; }else{ result=invocation.invoke();//如果登陆了,就继续往下执行 } return result; } }