欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java web项目Session获取不到问题及解决

程序员文章站 2022-06-17 14:41:27
目录java web项目session获取不到关于session的生命周期前后端分离获取不到session问题解决方案java web项目session获取不到在servlet类中对session进行...

java web项目session获取不到

在servlet类中对session进行了设置 但当servlet跳转到页面时 页面获取不到session!!!

关于session的生命周期

session保存在服务器端。session在用户第一次访问服务器的时候自动创建。需要注意只有访问jsp、servlet等程序时才会创建session,只访问html、image等静态资源并不会创建session。如果尚未生成session,也可以使用request.getsession(true)强制生成session。

而我们在页面获取不到seesion的原因可能是:浏览器禁用了cookie

使用url地址重写即可解决!

  • response.encoderedirecturl(url)用于对sendredirect方法后的url地址进行重写。
  • response.encodeurl(url)用于对表单action和超链接的url地址进行重写
string url=response.encoderedirecturl("url");
response.sendredirect(url);

这样在页面中即可使用

<%=request.getsession().getattribute("key")%>

来获取我们存储的seesion!!!

前后端分离获取不到session问题

前后端分离的项目,前端是vue,后端springboot,或者maven项目,生成验证码的时候存了一份到session并存到redis里,前端调后台注册获取不到session,但当用户从session中取信息的时候发现始终取不到,每次跨域请求时ajax发送的都是新的sessionid,导致无法获取信息

解决方案

前端在vue的main文件全局添加一下代码:

import axios from 'axios';
axios.defaults.withcredentials=true;

后台新增一个过滤器

web.xml文件

<filter>
    <filter-name>contextfilter</filter-name>
    <filter-class>com.zl.filter.contextfilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>contextfilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
public class contextfilter implements filter {
    @override
    public void init(filterconfig filterconfig) throws servletexception {
    }
    @override
    public void dofilter(servletrequest servletrequest, servletresponse servletresponse, filterchain filterchain) throws ioexception, servletexception {
        httpservletresponse response = (httpservletresponse)servletresponse;
        httpservletrequest request = (httpservletrequest)servletrequest;
        string origin = request.getheader("origin");
        response.setheader("access-control-allow-origin", origin);
        response.setheader("access-control-allow-methods", "*");
        string headers = request.getheader("access-control-request-headers");
         // 支持所有自定义头
        if (!org.springframework.util.stringutils.isempty(headers)) {
            response.setheader("access-control-allow-headers", headers);
        }
        response.setheader("access-control-allow-credentials", "true");
        response.setheader("access-control-max-age", "3600");
        filterchain.dofilter(request, response);
    }
    @override
    public void destroy() {
    }
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

相关标签: java web Session