权限控制拦截器是针对需要权限控制的的action所设定的特定的拦截器,避免了在action执行之前重复调用代码。类似与AOP原则可以增强代码的复用性,在特定的 切入点进行权限的控制并且是自动完成的不用action开发人员手动的调用。
登陆跳转实例如下:
登陆的action代码如下:
public String execute() throws Exception {
ActionContext actionContext=ActionContext.getContext();
Map session=actionContext.getSession();
if(this.getUsername().equals("lzhq")&&this.getPassword().equals("123")){
session.put("username", this.getUsername());
return SUCCESS;
}else
return INPUT;
}
页面跳转的action代码如下:
public class viewAction extends ActionSupport{
@Override
public String execute() throws Exception {
return SUCCESS;
}
拦截器类代码如下:
public String intercept(ActionInvocation invocation) throws Exception {
ActionContext actionContext=invocation.getInvocationContext();
Map session=actionContext.getSession();
String username=(String)session.get("username");
if(username!=null&&username.equals("lzhq")){
return invocation.invoke();
}else{
session.put("tip", "you have not login please login");
return Action.INPUT;
}
}
登陆成功后跳转到如下页面:
<body>
login success you can view the result of the book;<br/>
<s:a href="view.action">loop</s:a>
</body>
跳转成功后跳转到如下页面:
<body>
loop success;
</body>
如果没有登陆成功直接访问带有跳转超链接的页面可以访问到但是如果点击loop超链接不会跳转到跳转成功页面,因为在viewAction执行之前请求被拦截器获得,处理请求后发现没有在session中找到指定的登陆用户名因此不会将控制权交给下一个拦截器或者viewAction中的execute方法。直接跳转到INPUT页面提示用户重新登陆。完成拦截器的权限控制。