`
拖拖鞋
  • 浏览: 92215 次
  • 性别: 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>

相关推荐

    struts2 action 返回json方法(一)源码

    在实际开发中,可能需要处理更复杂的情况,如分页、过滤、排序等,此时可以利用Struts2的动态结果集或者自定义拦截器来实现。通过深入理解和实践,你将能够熟练地在Struts2框架下构建高效的数据交互接口。

    struts2+json

    总的来说,"struts2+json"资源涉及到了Struts2框架中的Action设计、拦截器机制、结果类型的配置,以及AJAX和JSON在Web应用中的使用。理解这些知识点对于开发动态、交互性强的Java Web应用至关重要。

    struts2返回json数据的方法一 使用json-default

    本篇文章将详细讲解如何在Struts2中使用“json-default”拦截器来返回JSON数据。 首先,我们需要理解Struts2的拦截器(Interceptor)机制。拦截器是Struts2框架的核心组件之一,它们在Action执行前后执行特定的任务...

    Struts2拦截器源码

    Struts2是一个强大的MVC(模型...通过理解和研究Struts2的拦截器源码,我们可以更好地利用这个强大工具,提高应用的可扩展性和灵活性。同时,这也为我们提供了对Struts2框架内部运作的深入了解,有助于优化和调试代码。

    struts2返回json格式的数据练习

    在"struts2返回json格式的数据练习"这个实例中,我们将学习如何配置Struts2框架以支持JSON输出,并创建一个简单的示例来展示这一过程。 首先,我们需要在Struts2项目的`pom.xml`文件中添加JSON插件依赖。Struts2的...

    struts2与json整合

    这样,Struts2就能够识别`json`类型的结果,并使用`JSONResult`来将Action返回的数据转换成JSON格式。 #### 3. 定义Action方法 在Struts2中,Action类中的方法负责处理来自客户端的请求。为了返回JSON数据,可以...

    json+struts2的jar

    1. **JSON与Struts2的集成**:Struts2提供了与JSON的集成支持,允许开发者通过配置Action类返回JSON格式的数据。这在实现AJAX(Asynchronous JavaScript and XML)请求时非常有用,可以实现页面的无刷新更新。 2. *...

    Struts2返回json -- demo

    3. **处理请求参数**:如果需要从请求中获取参数,Struts2提供了`params`拦截器,它可以自动将请求参数绑定到Action类的属性上。 4. **JSON插件配置**:在`struts.properties`或`struts.xml`中启用JSON插件: ```...

    Struts2 返回json对象

    在上面的配置中,我们定义了一个名为 "user" 的 action,该 action 使用 UserAction 类来处理用户的请求,并将结果以 JSON 格式返回。 通过这些步骤,我们可以使用 Struts2 返回 JSON 对象,以便在 Ajax 应用程序中...

    struts2-json-plugin源码

    在Struts2中,通过整合JSON插件,可以方便地将Action的返回结果转换为JSON格式,供前端JavaScript处理。 `struts2-json-plugin`是Struts2的一个插件,它使得Struts2能够处理JSON请求和响应,无需额外的配置或库。这...

    struts2 json

    这个插件提供了一组拦截器和结果类型,使得Action可以直接返回JSON响应。 2. **xwork-core-2.1.6.jar**:这是Struts2的核心库,包含了Action、Interceptor等关键组件。它为Struts2框架提供了基础架构和工作流。 3....

    Struts2+Json+Android简单实现

    在Struts2中,我们可以配置Action类返回JSON类型的结果,这样当客户端(如Android应用)发起请求时,服务器会返回JSON格式的数据。这些数据可以包含对象、数组、字符串、数字等多种类型,非常适合移动设备上的数据...

    Struts2中使用JSON数据格式所需全部jar包

    1. `struts2-json-plugin-x.x.x.jar`:这是Struts2的JSON插件,提供JSON动作结果类型和相关的拦截器,使得Action可以直接返回JSON响应。例如,如果Action返回一个Map或List,这个插件会自动将其转换为JSON格式。 2....

    struts2所需的包和Struts2_json所需包

    在实际开发中,为了测试Struts2返回JSON格式的数据,可以创建一个简单的Action,设置返回值,并在前端使用AJAX请求来接收这个JSON数据。例如,使用jQuery的$.ajax()方法进行请求,然后通过JSON.parse()解析返回的...

    struts2+jquery+json 小例子

    - **前端交互**:jQuery通过AJAX与后台Struts2 Action通信,发送JSON请求并接收JSON响应。 - **数据展示**:Struts2 Action处理完业务逻辑后,返回JSON结果,jQuery解析后动态更新DOM展示数据。 博客链接中提到的...

    json2+jsonplugin struts2整合ajax时,使用json时需要的jar包

    2. **Action类的配置**:为了返回JSON响应,你的Action类需要返回一个特定的结果类型,例如`json`: ```java public class MyAction extends ActionSupport { // ... public String execute() { // ... return...

    Struts2_JSON_Demo

    Struts2提供了相关的拦截器和配置选项来处理这些问题。 在"Struts2_JSON_Demo"项目中,你可以通过分析源代码,了解上述各个步骤的实现细节,从而深入理解Struts2和JSON的交互。这个示例项目将帮助你掌握如何在实际...

    struts2+jquery执行ajax并返回json类型数据(源码)

    在这个"struts2+jquery执行ajax并返回json类型数据"的示例中,我们将探讨如何通过Ajax技术在后台Struts2框架与前端jQuery库之间交换JSON格式的数据。 首先,Struts2是一个强大的MVC(Model-View-Controller)框架,...

    使用struts2 和ajax进行传递json数据

    使用`@Result`注解或struts.xml配置文件,可以指定一个结果类型为`json`,这样Struts2会将Action的返回对象转换成JSON格式并返回给前端。 **Ajax请求与JSON数据** 前端JavaScript代码使用XMLHttpRequest对象或现代...

Global site tag (gtag.js) - Google Analytics