登录拦截
一. 同步的方式
1.登录时将信息(一般是用户信息)存储在session中
2.定义拦截器 判断session中是否有用户信息
3.没有登录时 重定向到登录页面(同步请求重定向是有效的)
二.异步(ajax)的方式(页面在项目中)
1.登录时将用户信息放到session中
2.定义拦截器 判断session中是否存在用户信息
3.没有登录时 给前端返回统一的状态码 前端进行跳转
以上两种方式session默认是没有问题的
三.异步(axios)的方式(页面不在项目中)前后端分离的方式
这种方式默认不携带cookie 也就是说这种方式每次都会创建新的session对象 那么对象信息就会丢失 意味着永远登录不成功
那么如何解决这个问题呢?
很简单就是将默认不携带cookie改为携带cookie
1.后端(Java)让携带cookie
2.前端需要携带cookie
这里还有一个问题,当你自定义的拦截器满足条件时,代码向下执行没有任何问题.
但是,拦截器不满足条件时,前端会抛出一个跨域问题的异常,后端解决跨域也没有任何作用
这是什么原因?
我们看springmvc源码就可以知道springmvc解决跨域问题的就是一个拦截器,这个拦截器叫做CorsFilter;我们自定义拦截器时,会先进入我们自定义的拦截器,当满足我们自定义的拦截器时,代码向下执行,又进入CorsFilter解决跨域问题。如果不满足我们自定义的拦截器时,请求不会进入CorsFilter,直接返回前端,此时就又出现了跨域问题。
如何解决这个问题呢?
思想:就是在进入自定义的拦截器之前解决跨域问题
操作方式:
1.自定义Filter(Filter拦截的是进入servlet的请求的,而我们的拦截器是属于springmvc的,要想进入springmvc是要先进入DispatcherServlet的,所以Filter是要先于Interceptor拦截器执行的)
这种方式可以去百度
2.修改springmvc中跨域的过滤器顺序
步骤1.先容器中添加CorsFilter 并且是父容器中
步骤2.在web.xml中 使用DelegatingFilterProxy指定定义的过滤器即可