检查用户是否登陆,通常是跟踪用户的session来完成的,通过ActionContext既可以访问session中的属性,拦截器的intercept(ActionInvocation invocation)方法的invocation参数又可以很轻易的访问到请求相关的ActionContext实例,因此这个具有权限控制的拦截器代码,可以如下这样子写:
package com.inter;
import java.util.Map;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public class CheckInterceptor extends AbstractInterceptor {
private static final long serialVersionUID = 1L;
@Override
public String intercept(ActionInvocation invocation) throws Exception {
ActionContext actionContext = invocation.getInvocationContext();
Map<?, ?> sessionMap = actionContext.getSession();
String user = (String)sessionMap.get("name");
if(user != null && user.equals("admin")){
return invocation.invoke();
}
actionContext.put("message", "please login in!");
return Action.LOGIN;
}
}
在上面的intercept方法中队session中是否存在admin用户做了验证,如果用户名是admin,那么就是合法的用户,
即可以跳转到loginsuccess.jsp页面,否则跳转到LOGIN,并指出错误的信息,下面附上UserAction.java
package com.action;
import java.util.Map;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport {
private static final long serialVersionUID = 1L;
private String name;
private String pass;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
@SuppressWarnings("unchecked")
@Override
public String execute() throws Exception {
ActionContext actionContext = ActionContext.getContext();
if (getName().equals("admin") && getPass().equals("admin")) {
Map sessionMap = actionContext.getSession();
sessionMap.put("name", getName());
return SUCCESS;
} else {
actionContext.put("meessage", "the username or the password is failed!");
return ERROR;
}
}
}
上面的代码中将用户名和密码都是admin的用户都保存到的session中,以便于拦截器的验证,
下面各处三个视图,login.jsp,loginsuceess.jsp,info.jsp的代码:
<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>test</title>
</head>
<body>
<h1>用户登录</h1>
<font color="red">${requestScope.message}</font>
<s:form id="id" action="login">
<s:textfield name="name" label="用户名"></s:textfield>
<s:password name="pass" label="密码"></s:password>
<s:submit value="注册"></s:submit>
</s:form>
<a href=chakan.action>查看</a>
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>拦截器权限控制</title>
</head>
<body>
你已成功登录系统!<a href=chakan.action>查看</a>
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
系统主页!。。。
</body>
</html>
配置权限控制拦截器
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="hellointerceptor" extends="struts-default">
<interceptors>
<action name="login" class="com.action.UserAction">
<result name="error">/login.jsp</result>
<result name="success">/loginsuccess.jsp</result>
</action>
<action name="chakan">
<result>/info.jsp</result>
<result name="login">/login.jsp</result>
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="loginInterceptor"></interceptor-ref>
</action>
</package>
package com.inter;
import java.util.Map;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public class CheckInterceptor extends AbstractInterceptor {
private static final long serialVersionUID = 1L;
@Override
public String intercept(ActionInvocation invocation) throws Exception {
ActionContext actionContext = invocation.getInvocationContext();
Map<?, ?> sessionMap = actionContext.getSession();
String user = (String)sessionMap.get("name");
if(user != null && user.equals("admin")){
return invocation.invoke();
}
actionContext.put("message", "please login in!");
return Action.LOGIN;
}
}
在上面的intercept方法中队session中是否存在admin用户做了验证,如果用户名是admin,那么就是合法的用户,
即可以跳转到loginsuccess.jsp页面,否则跳转到LOGIN,并指出错误的信息,下面附上UserAction.java
package com.action;
import java.util.Map;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport {
private static final long serialVersionUID = 1L;
private String name;
private String pass;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
@SuppressWarnings("unchecked")
@Override
public String execute() throws Exception {
ActionContext actionContext = ActionContext.getContext();
if (getName().equals("admin") && getPass().equals("admin")) {
Map sessionMap = actionContext.getSession();
sessionMap.put("name", getName());
return SUCCESS;
} else {
actionContext.put("meessage", "the username or the password is failed!");
return ERROR;
}
}
}
上面的代码中将用户名和密码都是admin的用户都保存到的session中,以便于拦截器的验证,
下面各处三个视图,login.jsp,loginsuceess.jsp,info.jsp的代码:
<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>test</title>
</head>
<body>
<h1>用户登录</h1>
<font color="red">${requestScope.message}</font>
<s:form id="id" action="login">
<s:textfield name="name" label="用户名"></s:textfield>
<s:password name="pass" label="密码"></s:password>
<s:submit value="注册"></s:submit>
</s:form>
<a href=chakan.action>查看</a>
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>拦截器权限控制</title>
</head>
<body>
你已成功登录系统!<a href=chakan.action>查看</a>
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
系统主页!。。。
</body>
</html>
配置权限控制拦截器
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="hellointerceptor" extends="struts-default">
<interceptors>
<interceptor name="loginInterceptor" class="com.inter.CheckInterceptor">
</interceptor>
</interceptors><action name="login" class="com.action.UserAction">
<result name="error">/login.jsp</result>
<result name="success">/loginsuccess.jsp</result>
</action>
<action name="chakan">
<result>/info.jsp</result>
<result name="login">/login.jsp</result>
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="loginInterceptor"></interceptor-ref>
</action>
</package>
</struts>