首先定义一个拦截器类
package com.java.web.action.interceptor; import com.java.model.Admin; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.Interceptor; public class LoginValidateInterceptor implements Interceptor { private static final long serialVersionUID = 1L; public void destroy() { } public void init() { } /** * 这里拦截后台管理员登陆,防止用户在地址栏输入地址直接登陆 */ public String intercept(ActionInvocation invocation) throws Exception { Admin user = (Admin) ActionContext.getContext().getSession().get("loginUser"); if(user != null){ //说明session中存在,用户已经登录了 return invocation.invoke(); } //说明用户没有登录,要重新定向到登录页面 ActionContext.getContext().put("directUrl", "/page/controller/login.jsp"); return "url"; } }
然后配置struts.xml文件(部分代码) <package name="base" extends="struts-default"> <interceptors> <!-- 定义权限控制拦截器 --> <interceptor name="authority" class="com.java.web.action.interceptor.LoginValidateInterceptor" /> <!-- 定义一个包含权限控制的拦截器栈 --> <interceptor-stack name="mydefault"> <interceptor-ref name="defaultStack" /><!-- 默认的拦截器栈 ,一定要写的--> <interceptor-ref name="authority" /> </interceptor-stack> </interceptors> <default-interceptor-ref name="mydefault"/>自定义的拦截器没有放入个别的action中,表示对所有的action都进行拦截 <global-results> <!--定义全局result--> <result name="url">/page/share/url.jsp</result> <result name="message">/page/share/message.jsp</result> </global-results> </package> <!-- 前台用户模块 --> <package name="user" namespace="/user" extends="base">继承base包 <action name="*" class="{1}Action"> <result name="success">/page/user.jsp</result> </action> </package>