Struts2拦截器返回json格式(通过Action类来返回)

[b]原创!转载请注明地址[/b]
[url]http://ycde2009.iteye.com/blog/1870845[/url]
在struts2的拦截其中,我们一般会进行一些权限验证,当验证通过时,自然进行下一步的相关操作,但是如果没有验证通过,那么我们应该返回一些信息给客户端。
比如我们返回json格式的信息,那么我们就应该在拦截器验证失败后,返回一个字符串如:"return noLogin";那么我们只需配置一个全局的action result,再通过重定向到返回json字符的一个action。就可以了。
还可以看另一篇Struts2拦截器返回json格式(通过拦截器和jsp来返回)[url]http://ycde2009.iteye.com/blog/1990758[/url]来学习
以上是思路。下面是相关代码:


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;
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值