package
tutorial;
![](http://www.itfuture.org/UploadFile/200801201019273901.gif)
import
com.opensymphony.xwork2.ActionSupport;
![](http://www.itfuture.org/UploadFile/200801201019273903.gif)
![](http://www.itfuture.org/UploadFile/200801201019273904.gif)
public
class
AuthorizatedAccess
extends
ActionSupport
implements
RoleAware
{
private String role;
![](http://www.itfuture.org/UploadFile/200801201019273908.gif)
public void setRole(String role) {
this .role = role;
}
![](http://www.itfuture.org/UploadFile/2008012010192739013.gif)
public String getRole() {
return role;
}
![](http://www.itfuture.org/UploadFile/2008012010192739017.gif)
@Override
![](http://www.itfuture.org/UploadFile/2008012010192739019.gif)
public String execute() {
return SUCCESS;
}
}
package
tutorial;
![](http://www.itfuture.org/UploadFile/2008012010192739025.gif)
import
java.util.Hashtable;
import
java.util.Map;
![](http://www.itfuture.org/UploadFile/2008012010192739028.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739029.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739030.gif)
public
class
Roles
{
![](http://www.itfuture.org/UploadFile/2008012010192739032.gif)
public Map < String, String > getRoles() {
Map < String, String > roles = new Hashtable < String, String > ( 2 );
roles.put( " EMPLOYEE " , " Employee " );
roles.put( " MANAGER " , " Manager " );
return roles;
}
}
package
tutorial;
![](http://www.itfuture.org/UploadFile/2008012010192739041.gif)
import
java.util.Map;
![](http://www.itfuture.org/UploadFile/2008012010192739043.gif)
import
org.apache.struts2.interceptor.SessionAware;
![](http://www.itfuture.org/UploadFile/2008012010192739045.gif)
import
com.opensymphony.xwork2.ActionSupport;
![](http://www.itfuture.org/UploadFile/2008012010192739047.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739048.gif)
public
class
Login extends
ActionSupport implements
SessionAware
{
private String role;
private Map session;
![](http://www.itfuture.org/UploadFile/2008012010192739052.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739053.gif)
public String getRole() {
return role;
}
![](http://www.itfuture.org/UploadFile/2008012010192739057.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739058.gif)
public void setRole(String role) {
this .role = role;
}
![](http://www.itfuture.org/UploadFile/2008012010192739063.gif)
public void setSession(Map session) {
this .session = session;
}
![](http://www.itfuture.org/UploadFile/2008012010192739067.gif)
@Override
![](http://www.itfuture.org/UploadFile/2008012010192739069.gif)
public String execute() {
session.put( " ROLE " , role);
return SUCCESS;
}
}
![](http://www.itfuture.org/UploadFile/200801201019273901.gif)
![](http://www.itfuture.org/UploadFile/200801201019273902.gif)
![](http://www.itfuture.org/UploadFile/200801201019273903.gif)
![](http://www.itfuture.org/UploadFile/200801201019273904.gif)
![](http://www.itfuture.org/UploadFile/200801201019273905.gif)
![](http://www.itfuture.org/UploadFile/200801201019273906.gif)
![](http://www.itfuture.org/UploadFile/200801201019273907.gif)
![](http://www.itfuture.org/UploadFile/200801201019273908.gif)
![](http://www.itfuture.org/UploadFile/200801201019273909.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739010.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739011.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739012.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739013.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739014.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739015.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739016.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739017.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739018.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739019.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739020.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739021.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739022.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739023.gif)
以下是ShowUser.jsp的代码:
<%
@ page contentType
=
"
text/html; charset=UTF-8
"
%>
<% @taglib prefix = " s " uri = " /struts-tags " %>
< html >
< head >
< title > Authorizated User </ title >
</ head >
< body >
< h1 > Your role is: < s:property value ="role" /></ h1 >
</ body >
</ html >
<% @taglib prefix = " s " uri = " /struts-tags " %>
< html >
< head >
< title > Authorizated User </ title >
</ head >
< body >
< h1 > Your role is: < s:property value ="role" /></ h1 >
</ body >
</ html >
然后,创建tutorial.Roles初始化角色列表,代码如下:
![](http://www.itfuture.org/UploadFile/2008012010192739024.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739025.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739026.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739027.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739028.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739029.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739030.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739031.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739032.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739033.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739034.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739035.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739036.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739037.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739038.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739039.gif)
接下来,新建Login.jsp实例化tutorial.Roles,并将其roles属性赋予<s:radio>标志,代码如下:
<%
@ page contentType
=
"
text/html; charset=UTF-8
"
%>
<% @taglib prefix = " s " uri = " /struts-tags " %>
< html >
< head >
< title > Login </ title >
</ head >
< body >
< h1 > Login </ h1 >
Please select a role below:
< s:bean id ="roles" name ="tutorial.Roles" />
< s:form action ="Login" >
< s:radio list ="#roles.roles" value ="'EMPLOYEE'" name ="role" label ="Role" />
< s:submit />
</ s:form >
</ body >
</ html >
<% @taglib prefix = " s " uri = " /struts-tags " %>
< html >
< head >
< title > Login </ title >
</ head >
< body >
< h1 > Login </ h1 >
Please select a role below:
< s:bean id ="roles" name ="tutorial.Roles" />
< s:form action ="Login" >
< s:radio list ="#roles.roles" value ="'EMPLOYEE'" name ="role" label ="Role" />
< s:submit />
</ s:form >
</ body >
</ html >
创建Action类tutorial.Login将role放到session中,并转到Action类tutorial.AuthorizatedAccess,代码如下:
![](http://www.itfuture.org/UploadFile/2008012010192739040.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739041.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739042.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739043.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739044.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739045.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739046.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739047.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739048.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739049.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739050.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739051.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739052.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739053.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739054.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739055.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739056.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739057.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739058.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739059.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739060.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739061.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739062.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739063.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739064.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739065.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739066.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739067.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739068.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739069.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739070.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739071.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739072.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739073.gif)
![](http://www.itfuture.org/UploadFile/2008012010192739074.gif)
最后,配置struts.xml文件,内容如下:
<!
DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd" >
< struts >
< include file ="struts-default.xml" />
< package name ="InterceptorDemo" extends ="struts-default" >
< interceptors >
< interceptor name ="auth" class ="tutorial.AuthorizationInterceptor" />
</ interceptors >
< action name ="Timer" class ="tutorial.TimerInterceptorAction" >
< interceptor-ref name ="timer" />
< result > /Timer.jsp </ result >
</ action >
< action name ="Login" class ="tutorial.Login" >
< result type ="chain" > AuthorizatedAccess </ result >
</ action >
< action name ="AuthorizatedAccess" class ="tutorial.AuthorizatedAccess" >
< interceptor-ref name ="auth" />
< result name ="login" > /Login.jsp </ result >
< result name ="success" > /ShowRole.jsp </ result >
</ action >
</ package >
</ struts >
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd" >
< struts >
< include file ="struts-default.xml" />
< package name ="InterceptorDemo" extends ="struts-default" >
< interceptors >
< interceptor name ="auth" class ="tutorial.AuthorizationInterceptor" />
</ interceptors >
< action name ="Timer" class ="tutorial.TimerInterceptorAction" >
< interceptor-ref name ="timer" />
< result > /Timer.jsp </ result >
</ action >
< action name ="Login" class ="tutorial.Login" >
< result type ="chain" > AuthorizatedAccess </ result >
</ action >
< action name ="AuthorizatedAccess" class ="tutorial.AuthorizatedAccess" >
< interceptor-ref name ="auth" />
< result name ="login" > /Login.jsp </ result >
< result name ="success" > /ShowRole.jsp </ result >
</ action >
</ package >
</ struts >
发布运行应用程序,在浏览器地址栏中输入:http://localhost:8080/Struts2_Interceptor/AuthorizatedAccess.action。由于此时,session还没有键为“ROLE”的值,所以返回Login.jsp页面,如图2所示:
选中Employee,点击Submit,出现图3所示页面:
图3 ShowRole.jsp
总结
拦截器是Struts 2比较重要的一个功能。通过正确地使用拦截器,我们可以编写高可复用的代码