NutzCN Logo
问答 Chain 做会话验证,验证不通过怎么返回Json格式数据呢?
发布于 2674天前 作者 qq_93105859 1766 次浏览 复制 上一个帖子 下一个帖子
标签: nutzwk

代码:
继承AbstractProcessor,实现process方法:
代码中1、2、3处我想不再往后面执行,直接返回json格式数据,但是不知道怎么返回

@Override
public void process(ActionContext ac) throws Throwable {
		HttpServletRequest req = ac.getRequest();
		String json = req.getParameter("params");
		Map<String, String> params = null;
		try {
			if (StringUtils.compareTrim(json))
				params = (Map<String, String>) Json.fromJson(json);
		} catch (Exception e) {
			e.printStackTrace();
		}
		String sessionId = null;
		if (params != null)
			sessionId = params.get("sessionId");
		String reqUri = req.getRequestURI();
		if (reqUri.contains("/wds/y/")) {
			if (!StringUtils.compareTrim(sessionId)) {
				System.out.println("缺少参数:sessionId");
				// 1、缺少参数:sessionId
			} else {
				Session session = SC.get(sessionId);
				if (session == null) {
					//2、 会话已过期
					System.out.println("会话已过期");
				} else if (session.isInvalid()) {
					// 3、该会话在其他地方登录,已失效
					System.out.println("该会话在其他地方登录,已失效");
				} else {
					System.out.println("会话正常");
					doNext(ac);
				}
			}
		} else {
			// 不需要登录的请求
			System.out.println("不需要登录的请求");
			doNext(ac);
		}
15 回复
ac.getResp().getWriter().print(Json.toJson(...));

@wendal 谢谢,我试下,回复真快!

@wendal有一个编译错:The method getResp() is undefined for the type ActionContext

@wendal ac.getResponse()这样对了

@wendal 参数加上以后权限是可以验证了,但是提交的参数乱码了,何解?

没走post?

是post的,去掉就不乱码,加上这个就乱,貌似加上req.setCharacterEncoding("UTF-8");这一句又可以了

你是不是把动作链里面的其他处理器都删了....

@wendal 没有,我只在前面加了一个
"com.zq.ums.mvc.CheckSessionProcessor",

var chain = {
	"default" : {
		"ps" : [
			"com.zq.ums.mvc.CheckSessionProcessor",
			"com.zq.ums.mvc.LogTimeProcessor",
			"org.nutz.mvc.impl.processor.UpdateRequestAttributesProcessor",
			"org.nutz.mvc.impl.processor.EncodingProcessor",
			"org.nutz.mvc.impl.processor.ModuleProcessor",
			"org.nutz.mvc.impl.processor.ActionFiltersProcessor",
			"org.nutz.mvc.impl.processor.AdaptorProcessor",
			"org.nutz.mvc.impl.processor.MethodInvokeProcessor",
			"org.nutz.mvc.impl.processor.ViewProcessor"
		],
		"error" : 'org.nutz.mvc.impl.processor.FailProcessor'
	}
};

org.nutz.mvc.impl.processor.UpdateRequestAttributesProcessor 放最前面,这个会设置编码

@wendal

var chain = {
	"default" : {
		"ps" : [
		    "org.nutz.mvc.impl.processor.UpdateRequestAttributesProcessor",
			"com.zq.ums.mvc.CheckSessionProcessor",
			"com.zq.ums.mvc.LogTimeProcessor",
			"org.nutz.mvc.impl.processor.EncodingProcessor",
			"org.nutz.mvc.impl.processor.ModuleProcessor",
			"org.nutz.mvc.impl.processor.ActionFiltersProcessor",
			"org.nutz.mvc.impl.processor.AdaptorProcessor",
			"org.nutz.mvc.impl.processor.MethodInvokeProcessor",
			"org.nutz.mvc.impl.processor.ViewProcessor"
		],
		"error" : 'org.nutz.mvc.impl.processor.FailProcessor'
	}
};

这样就可以把

req.setCharacterEncoding("UTF-8");
		ac.getResponse().setCharacterEncoding("UTF-8");

去掉了?

是的,不需要了

@wendal 应该是把EncodingProcessor这个放都最前面去

哦哦,是我记错了

添加回复
请先登陆
回到顶部