老师,我想写个拦截器处理是否登录的问题,有些不明白
来源:6-3 登出,注册,校验功能开发
慕丝6684160
2017-08-25
User user = (User) session.getAttribute(Const.CURRENT_USER); 咱们使用这个验证用户是否登录的,我想写个拦截器直接在请求controller之前拦截判断session中时候登录。
在preHandle方法里面,如果session中没有用户,那么 request.getRequestDispatcher("/user/relogin").forward(request, response);
我写一个relogin的handler处理没有登录的情况,直接返回一个ServerResponse.creatByErrorMessage("你没登录,被拦截了")

现在问题是我直接模拟post去请求接口的时候都能正确被拦截(没有拦截login和relogin),然后转发到relogin返回一个ServerResponse。
http请求会被转发,但是对于ajax请求,应该怎么转给controller处理,或者应该怎么返回给前端咱们封装好的ServerResponse对象呢?这个是需要后台做些什么逻辑呢?还是说咱们这种ajax请求,json返回的约定开发,如果想返回ServerResponse的话不能用这种拦截器?
我不太懂ajax,我的理解是这个prehandle方法只能返回Boolean,如果要想返回ServerResponse对象给前端,只能转发到controller去处理。ajax一次请求不知道怎么返回ServerResponse,还是更改与前端的约定,返回relogin地址后在进行第二次ajax请求呢,还是在拦截器方法上做处理呢?
1回答
-
ok ,我明白你的意思,首先给你一个大大的赞!!你这个问题思路非常好,这里我就给你解决一下,二期我们又详细讲拦截器处理目前权限判断的事情。
首先这个拦截器返回只能是boolean类型,ok,然后是如何修改返回值哇哈哈,你记得writer不
PrintWriter out = response.getWriter();
在这之前记得用response.reset一下,否则会出现异常。
然后通过out来组装ServerResponse哟,还有乱码要控制一下编码问题。
你按照这个思路就可以滴~~
还要记得关闭流哟~~
最后再给你来一个大大的赞!!!
30
相似问题