原创!转载请注明地址
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;
}
}
分享到:
相关推荐
在实际开发中,可能需要处理更复杂的情况,如分页、过滤、排序等,此时可以利用Struts2的动态结果集或者自定义拦截器来实现。通过深入理解和实践,你将能够熟练地在Struts2框架下构建高效的数据交互接口。
总的来说,"struts2+json"资源涉及到了Struts2框架中的Action设计、拦截器机制、结果类型的配置,以及AJAX和JSON在Web应用中的使用。理解这些知识点对于开发动态、交互性强的Java Web应用至关重要。
本篇文章将详细讲解如何在Struts2中使用“json-default”拦截器来返回JSON数据。 首先,我们需要理解Struts2的拦截器(Interceptor)机制。拦截器是Struts2框架的核心组件之一,它们在Action执行前后执行特定的任务...
Struts2是一个强大的MVC(模型...通过理解和研究Struts2的拦截器源码,我们可以更好地利用这个强大工具,提高应用的可扩展性和灵活性。同时,这也为我们提供了对Struts2框架内部运作的深入了解,有助于优化和调试代码。
在"struts2返回json格式的数据练习"这个实例中,我们将学习如何配置Struts2框架以支持JSON输出,并创建一个简单的示例来展示这一过程。 首先,我们需要在Struts2项目的`pom.xml`文件中添加JSON插件依赖。Struts2的...
这样,Struts2就能够识别`json`类型的结果,并使用`JSONResult`来将Action返回的数据转换成JSON格式。 #### 3. 定义Action方法 在Struts2中,Action类中的方法负责处理来自客户端的请求。为了返回JSON数据,可以...
1. **JSON与Struts2的集成**:Struts2提供了与JSON的集成支持,允许开发者通过配置Action类返回JSON格式的数据。这在实现AJAX(Asynchronous JavaScript and XML)请求时非常有用,可以实现页面的无刷新更新。 2. *...
3. **处理请求参数**:如果需要从请求中获取参数,Struts2提供了`params`拦截器,它可以自动将请求参数绑定到Action类的属性上。 4. **JSON插件配置**:在`struts.properties`或`struts.xml`中启用JSON插件: ```...
在上面的配置中,我们定义了一个名为 "user" 的 action,该 action 使用 UserAction 类来处理用户的请求,并将结果以 JSON 格式返回。 通过这些步骤,我们可以使用 Struts2 返回 JSON 对象,以便在 Ajax 应用程序中...
在Struts2中,通过整合JSON插件,可以方便地将Action的返回结果转换为JSON格式,供前端JavaScript处理。 `struts2-json-plugin`是Struts2的一个插件,它使得Struts2能够处理JSON请求和响应,无需额外的配置或库。这...
这个插件提供了一组拦截器和结果类型,使得Action可以直接返回JSON响应。 2. **xwork-core-2.1.6.jar**:这是Struts2的核心库,包含了Action、Interceptor等关键组件。它为Struts2框架提供了基础架构和工作流。 3....
在Struts2中,我们可以配置Action类返回JSON类型的结果,这样当客户端(如Android应用)发起请求时,服务器会返回JSON格式的数据。这些数据可以包含对象、数组、字符串、数字等多种类型,非常适合移动设备上的数据...
1. `struts2-json-plugin-x.x.x.jar`:这是Struts2的JSON插件,提供JSON动作结果类型和相关的拦截器,使得Action可以直接返回JSON响应。例如,如果Action返回一个Map或List,这个插件会自动将其转换为JSON格式。 2....
在实际开发中,为了测试Struts2返回JSON格式的数据,可以创建一个简单的Action,设置返回值,并在前端使用AJAX请求来接收这个JSON数据。例如,使用jQuery的$.ajax()方法进行请求,然后通过JSON.parse()解析返回的...
- **前端交互**:jQuery通过AJAX与后台Struts2 Action通信,发送JSON请求并接收JSON响应。 - **数据展示**:Struts2 Action处理完业务逻辑后,返回JSON结果,jQuery解析后动态更新DOM展示数据。 博客链接中提到的...
2. **Action类的配置**:为了返回JSON响应,你的Action类需要返回一个特定的结果类型,例如`json`: ```java public class MyAction extends ActionSupport { // ... public String execute() { // ... return...
Struts2提供了相关的拦截器和配置选项来处理这些问题。 在"Struts2_JSON_Demo"项目中,你可以通过分析源代码,了解上述各个步骤的实现细节,从而深入理解Struts2和JSON的交互。这个示例项目将帮助你掌握如何在实际...
在这个"struts2+jquery执行ajax并返回json类型数据"的示例中,我们将探讨如何通过Ajax技术在后台Struts2框架与前端jQuery库之间交换JSON格式的数据。 首先,Struts2是一个强大的MVC(Model-View-Controller)框架,...
使用`@Result`注解或struts.xml配置文件,可以指定一个结果类型为`json`,这样Struts2会将Action的返回对象转换成JSON格式并返回给前端。 **Ajax请求与JSON数据** 前端JavaScript代码使用XMLHttpRequest对象或现代...