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

原创!转载请注明地址
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;
    }
}

你可能感兴趣的:(javaee,struts2拦截器)