老师,我想写个拦截器处理是否登录的问题,有些不明白

来源: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("你没登录,被拦截了")

http://szimg.mukewang.com/599f9abe00012e7617600728.jpg http://szimg.mukewang.com/599f9b130001b5c314000258.jpg

现在问题是我直接模拟post去请求接口的时候都能正确被拦截(没有拦截login和relogin),然后转发到relogin返回一个ServerResponse。

http请求会被转发,但是对于ajax请求,应该怎么转给controller处理,或者应该怎么返回给前端咱们封装好的ServerResponse对象呢?这个是需要后台做些什么逻辑呢?还是说咱们这种ajax请求,json返回的约定开发,如果想返回ServerResponse的话不能用这种拦截器?

我不太懂ajax,我的理解是这个prehandle方法只能返回Boolean,如果要想返回ServerResponse对象给前端,只能转发到controller去处理。ajax一次请求不知道怎么返回ServerResponse,还是更改与前端的约定,返回relogin地址后在进行第二次ajax请求呢,还是在拦截器方法上做处理呢?

写回答

1回答

Geely

2017-08-27

ok ,我明白你的意思,首先给你一个大大的赞!!你这个问题思路非常好,这里我就给你解决一下,二期我们又详细讲拦截器处理目前权限判断的事情。


首先这个拦截器返回只能是boolean类型,ok,然后是如何修改返回值哇哈哈,你记得writer不

PrintWriter out = response.getWriter();


在这之前记得用response.reset一下,否则会出现异常。

然后通过out来组装ServerResponse哟,还有乱码要控制一下编码问题。

你按照这个思路就可以滴~~

还要记得关闭流哟~~

最后再给你来一个大大的赞!!!

3
0

从0开始 独立完成企业级Java电商网站服务端开发

前后端分离,数据库接口设计,架构设计,功能开发,上线运维

9502 学习 · 8820 问题

查看课程