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 拦截器
也可以继承MethodFilterInterceptor, 可以指定拦截器拦截Action的哪些方法
例如:
<interceptors>
<interceptor name="myInterceptor" class="com.kevin.web.MyInterceptor">
<param name="includeMethods">toTest1</param>
</interceptor>
</interceptors>
自定义拦截器中获取request。response。
HttpServletRequest request = (HttpServletRequest) invocation.getInvocationContext().get(ServletActionContext.HTTP_REQUEST);
/**
* 登录拦截器
*/
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"><span style="white-space:pre"> </span><pre code_snippet_id="152132" snippet_file_name="blog_20140111_4_1671238" class="java" name="code"><span style="white-space:pre"> </span><interceptor-ref name="defaultStack" />
<interceptor-ref name="loginInterceptor" /> </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>