JavaWeb -- Struts 自定义拦截器, 登录权限拦截
1. 自定义拦截器, 登录权限拦截
login.jsp 登录JSP
<%@ page language="java" contentType="text/html; charset=utf-8"%> <%@taglib uri="/struts-tags" prefix="s"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>login.jsp</title> </head> <body> <s:form action="LoginAction_reg" name="login"> <s:textfield name="name" label="UserName" /> <s:submit /> </s:form> </body> </html>
LoginAction.java 登录处理action
/** * 登录action */ public class LoginAction extends ActionSupport implements SessionAware{ private static final long serialVersionUID = -6933309304624396640L; public String name; /* 接受session中的map */ private Map<String, Object> sessionMap; public String getName() { return name; } public void setName(String name) { this.name = name; } public String reg() { if("tom".equals(name)){ //存放登录信息 sessionMap.put("username", name); } else{ //回到登录页面 return LOGIN ; } return "success"; } public String toLoginView() { System.out.println("toRegView"); return "loginView"; } /** * 注入session map */ public void setSession(Map<String, Object> session) { this.sessionMap = session ; } }
LoginInterceptor.java 拦截器
/** * 登录拦截器 */ public class LoginInterceptor implements Interceptor { private static final long serialVersionUID = 286019271181543787L; public void destroy() { } public void init() { } public String intercept(ActionInvocation invocation) throws Exception { Object action = invocation.getAction(); //如果是达到登录或者注册的action,则直接放行 if(action instanceof LoginAction || action instanceof RegAction){ return invocation.invoke(); } Map<String, Object> sessionMap = invocation.getInvocationContext().getSession(); //如果没有登录 if(sessionMap.get("username") == null){ return "login" ; } //放行 else{ return invocation.invoke(); } } }
login.xml ,action interceptor 注册配置, 需要加到struts.xml (include)
<?xml version="1.0"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN" "http://struts.apache.org/dtds/struts-2.1.7.dtd"> <struts> <package name="LoginPkg" namespace="/login" extends="struts-default"> <interceptors> <!-- 注册拦截器 --> <interceptor name="loginInterceptor" class="cn.itcast.struts2.interceptor.LoginInterceptor" /> <!-- 自定义拦截器栈 --> <interceptor-stack name="loginStack"> <interceptor-ref name="loginInterceptor" /> <interceptor-ref name="defaultStack" /> </interceptor-stack> </interceptors> <!-- 定义默认栈 --> <default-interceptor-ref name="loginStack" /> <!-- 定义全局结果 --> <global-results> <result name="login">/login.jsp</result> </global-results> <!-- 注册登录action --> <action name="LoginAction_*" class="cn.itcast.struts2.interceptor.LoginAction" method="{1}"> <result name="success">/success.jsp</result> <result name="loginView">/login.jsp</result> </action> </package> </struts>