原创!转载请注明地址
http://ycde2009.iteye.com/blog/1870845
在struts2的拦截其中,我们一般会进行一些权限验证,当验证通过时,自然进行下一步的相关操作,但是如果没有验证通过,那么我们应该返回一些信息给客户端。
比如我们返回json格式的信息,那么我们就应该在拦截器验证失败后,返回一个字符串如:"return noLogin";那么我们只需配置一个全局的action result,再通过重定向到返回json字符的一个action。就可以了。
还可以看另一篇Struts2拦截器返回json格式(通过拦截器和jsp来返回)
http://ycde2009.iteye.com/blog/1990758来学习
以上是思路。下面是相关代码:
public String intercept(ActionInvocation actionInvocation) throws Exception {
// 获取session里面的用户
User loginUser = (User) ActionContext.getContext().getSession().get(GlobalSetting.AUTHORIZE_KEY);
// 获取请求的action
String actionName=actionInvocation.getInvocationContext().getName();
// 去权限配置文件里面查找对应的action的名字,检查此action是否为必须登录和验证
String level=TextResourceUtil.propsPermissionConfig.getProperty(actionName);
// 若level不为空,则代表此action需要被验证,而且调用此action的用户必须登录
if(null!=level){
if(null==loginUser){
return "noLogin";
}else{
if(level.equals(TextResourceUtil.Level_LoginValidation)){// 登录后需要验证的权限
PerBusiness perBusiness=new PerBusiness();
List<Permission> pers=perBusiness.detailByRoleID(""+loginUser.getRoleID());
for(Permission per:pers){
if(per.getFunctionItems().indexOf(actionName)!=-1){
return actionInvocation.invoke();
}
}
// 在此用户的角色里。没有找到此请求的权限
return "noPermission";
}
if(level.equals(TextResourceUtil.Level_Login)){
return actionInvocation.invoke();
}
}
}
return actionInvocation.invoke();
}
<package name="test-json" extends="json-default">
<interceptors>
<interceptor name="interceptSqlSession"
class="com.test.action.InterceptSqlSession"/>
<interceptor name="authorizeInterceptor"
class="com.test.action.AuthorizeInterceptor"/>
<interceptor name="permissionInterceptor"
class="com.test.action.PermissionInterceptor"/>
<interceptor-stack name="testStack">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="interceptSqlSession" />
<interceptor-ref name="authorizeInterceptor" />
<interceptor-ref name="permissionInterceptor" />
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="testStack" />
<global-results>
<result name="noPermission" type="redirect">
/errorPermissionJSON/noPermissionJSON
</result>
<result name="noLogin" type="redirect">
/errorPermissionJSON/noLoginJSON
</result>
</global-results>
</package>
<?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="errorPermissionJSON-default" extends="test-json" namespace="/errorPermissionJSON">
<action name="noPermissionJSON" class="com.test.action.ErrorPermissionJSON" method="noPermission">
<result type="json">
<param name="root">dataMap</param>
<param name="ignoreHierarchy">false</param>
</result>
</action>
<action name="noLoginJSON" class="com.test.action.ErrorPermissionJSON" method="noLogin">
<result type="json">
<param name="root">dataMap</param>
<param name="ignoreHierarchy">false</param>
</result>
</action>
</package>
</struts>
public class ErrorPermissionJSON extends JSONBaseAction{
private OperationResult operationResult;
private HashMap<String,Object> dataMap=new HashMap<String, Object>();
public String noPermission(){
dataMap.clear();
operationResult=new OperationResult();
operationResult.setResultCode(1);System.out.println("dsddasdsasda");
operationResult.setErrorMsg("您的权限不够!若要继续操作,请联系管理员!");
dataMap.put("operationResult", operationResult);
return SUCCESS;
}
public String noLogin(){
dataMap.clear();
operationResult=new OperationResult();
operationResult.setResultCode(1);
operationResult.setErrorMsg("您还没有登录,请登录!");
dataMap.put("operationResult", operationResult);
return SUCCESS;
}
public OperationResult getOperationResult() {
return operationResult;
}
public void setOperationResult(OperationResult operationResult) {
this.operationResult = operationResult;
}
public HashMap<String, Object> getDataMap() {
return dataMap;
}
public void setDataMap(HashMap<String, Object> dataMap) {
this.dataMap = dataMap;
}
}
分享到:
相关推荐
封装到JSON对象,再把JSON对象转为字符串传到Action,接到数据后,再把JSON字符串变为JSON对象,通过JSON的键,取出数据,通过调用数据库返回数据封装在JSON,打印出数据,然后在客户端接收Action打印出来的数据显示...
4.3 研究内建的Struts 2拦截器 67 4.3.1 工具拦截器 67 4.3.2 数据转移拦截器 67 4.3.3 工作流拦截器 69 4.3.4 其他拦截器 72 4.3.5 内建的拦截器栈 73 4.4 声明拦截器 74 4.4.1 声明独立的拦截器和拦截器栈 74 ...
基于AOP(面向切面编程)思想的拦截器机制,更易扩展(不修改源代码的条件下,增强代码功能) 更强大、更易用输入校验功能 整合Ajax支持:json插件 Struts2的今生前世: 1.早期开发模型Servlet+JSP+JavaBean显得...
.....XWork拦截器 .....XWork转换器 .....XWork校验器_使用 .....XWork校验器_定义 .....标签库_简介与OGNL .....标签库_主题与模板 .....标签库_非表单标签 .....标签库_表单标签 .....国际化 .....token令牌 ........
2.6.1 struts 2内建拦截器介绍 95 2.6.2 定义和使用拦截器栈 97 2.6.3 使用自定义拦截器 98 2.7 小结 100 第3章 struts 2标签库详解与ajax技术应用 103 3.1 struts 2主题与模板 103 3.2 struts 2控制标签详解 ...
拦截器: interceptor包; Timer.jsp Login.jsp ShowUser.jsp IoC反转控制: spring.ioc包; (有问题.............待解决.........) struts和Ajax: (例子一) 载入了json包; strutsandajax包; 可以直接运行jsonplugsm....
使用拦截器机制来限制未登录用户对购买、结算等Action的访问,保证了系统的健壮性。 对分页进行了组建化封装,提高了系统的通用性。 层与层之间采用接口连接,面向接口编程使得系统结构良好。 经验总结: 通过该...
第 1章 STRUTS2入门................................................................................................................................................3 第 2章STRUTS2晋级.....................
action:存放struts2控制类的包 dao:数据库访问封装 enm:系统中使用到的常量包,这里不是用的常量,用的是枚举替代常量 entity:hibernate对应的orm与数据库表一一对应的实体类 filter:Log4jFormatFilter(格式化...
Struts2框架介绍、工作原理与架构分析、6大配置文件分析使用通配符定义action、动态方法调用,ActionContext及ServletActionContext...默认拦截器分析、自定义拦截器、OGNL表达式、值栈分析及操作、标签、 json使用。
\contentsline {chapter}{Contents}{2}{section*.1} {1}Java基础}{17}{chapter.1} {1.1}基本语法}{17}{section.1.1} {1.2}数字表达方式}{17}{section.1.2} {1.3}补码}{19}{section.1.3} {1.3.1}总结}{23}{...