`
拖拖鞋
  • 浏览: 90592 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

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;
    }
}
分享到:
评论
4 楼 拖拖鞋 2015-05-19  
你那个方法也可以,但是我说的就是没有用插件 struts2-json-plugin 的情况!
3 楼 h573980998 2015-05-07  
绕远路差评 ,明明拦截器里写
actionContext.put("result", result);
return "error";

<result name="error" type="json">
<param name="root">result</param>
</result>
就可以直接返回json还什么jsp啊
(struts2-json-plugin)
2 楼 liaoymm 2015-04-07  
麻烦您解答一下,谢谢
1 楼 liaoymm 2015-04-07  
您好 ,请问这里我的代码是怎么跳转到其他action的,需要作什么設置嘛 ,我的跳轉不過去呢
<global-results> 
          <result name="noPermission" type="redirect"> 
              /errorPermissionJSON/noPermissionJSON 
          </result> 
           <result name="noLogin" type="redirect"> 
              /errorPermissionJSON/noLoginJSON 
           </result> 
    </global-results>

相关推荐

    jQuery+Struts1.2+JSON

    封装到JSON对象,再把JSON对象转为字符串传到Action,接到数据后,再把JSON字符串变为JSON对象,通过JSON的键,取出数据,通过调用数据库返回数据封装在JSON,打印出数据,然后在客户端接收Action打印出来的数据显示...

    Struts2 in 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 ...

    struts项目学习笔记

    基于AOP(面向切面编程)思想的拦截器机制,更易扩展(不修改源代码的条件下,增强代码功能) 更强大、更易用输入校验功能 整合Ajax支持:json插件 Struts2的今生前世: 1.早期开发模型Servlet+JSP+JavaBean显得...

    Struts2技术手册-Struts2精华教程-电子书

    .....XWork拦截器 .....XWork转换器 .....XWork校验器_使用 .....XWork校验器_定义 .....标签库_简介与OGNL .....标签库_主题与模板 .....标签库_非表单标签 .....标签库_表单标签 .....国际化 .....token令牌 ........

    低清版 大型门户网站是这样炼成的.pdf

    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控制标签详解 ...

    struts自我学习过程程序以及说明

    拦截器: interceptor包; Timer.jsp Login.jsp ShowUser.jsp IoC反转控制: spring.ioc包; (有问题.............待解决.........) struts和Ajax: (例子一) 载入了json包; strutsandajax包; 可以直接运行jsonplugsm....

    达内Java培训项目(当当网/通用电子商务系统)

    使用拦截器机制来限制未登录用户对购买、结算等Action的访问,保证了系统的健壮性。 对分页进行了组建化封装,提高了系统的通用性。 层与层之间采用接口连接,面向接口编程使得系统结构良好。 经验总结: 通过该...

    Struts2入门教程。包括jquery集成等。入门必看

    第 1章 STRUTS2入门................................................................................................................................................3 第 2章STRUTS2晋级.....................

    java后台框架源码

    action:存放struts2控制类的包 dao:数据库访问封装 enm:系统中使用到的常量包,这里不是用的常量,用的是枚举替代常量 entity:hibernate对应的orm与数据库表一一对应的实体类 filter:Log4jFormatFilter(格式化...

    struts2深入浅出(备java基础,javaweb,javaee,框架)

    Struts2框架介绍、工作原理与架构分析、6大配置文件分析使用通配符定义action、动态方法调用,ActionContext及ServletActionContext...默认拦截器分析、自定义拦截器、OGNL表达式、值栈分析及操作、标签、 json使用。

    Java学习笔记-个人整理的

    \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}{...

Global site tag (gtag.js) - Google Analytics