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

 更新时间:2022年01月12日 14:33:49   作者:shiGuang°  
这篇文章主要介绍了java web项目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编程实现排他锁代码详解

    Java编程实现排他锁代码详解

    这篇文章主要介绍了Java编程实现排他锁的相关内容,叙述了实现此代码锁所需要的功能,以及作者的解决方案,然后向大家分享了设计源码,需要的朋友可以参考下。
    2017-10-10
  • Java集合Map的clear与new Map区别详解

    Java集合Map的clear与new Map区别详解

    这篇文章主要介绍了Java集合Map的clear与new Map区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • Java判断2个List集合是否相等(不考虑元素的顺序)

    Java判断2个List集合是否相等(不考虑元素的顺序)

    今天小编就为大家分享一篇关于Java判断2个List集合是否相等(不考虑元素的顺序)的文章,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10
  • Springboot项目对数据库用户名密码实现加密过程解析

    Springboot项目对数据库用户名密码实现加密过程解析

    这篇文章主要介绍了Springboot项目对数据库用户名密码实现加密过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • Kotlin语法学习-变量定义、函数扩展、Parcelable序列化等简单总结

    Kotlin语法学习-变量定义、函数扩展、Parcelable序列化等简单总结

    这篇文章主要介绍了Kotlin语法学习-变量定义、函数扩展、Parcelable序列化等简单总结的相关资料,需要的朋友可以参考下
    2017-05-05
  • Java调用groovy实现原理代码实例

    Java调用groovy实现原理代码实例

    这篇文章主要介绍了Java调用groovy实现原理代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-12-12
  • java Tapestry4.1.2入门说明教程

    java Tapestry4.1.2入门说明教程

    不必关心链接!不必关心请求(http request)到了哪里!不必关心响应(http response)要转向哪里!Tapestry构建于底层的request-resonse模式,基于Servlet技术,抽象出面向组件开发的模型。Tapestry关心的是:页面、组件、事件、对象、方法、属性!
    2008-11-11
  • Jersey实现Restful服务(实例讲解)

    Jersey实现Restful服务(实例讲解)

    下面小编就为大家带来一篇Jersey实现Restful服务(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • 基于Java SSM的健康管理小程序的实现

    基于Java SSM的健康管理小程序的实现

    本篇文章主要为大家分享了基于SSM健康管理小程序的设计与实现。感兴趣的小伙伴可以了解一下
    2021-11-11
  • Java多线程案例之阻塞队列详解

    Java多线程案例之阻塞队列详解

    阻塞队列是一种特殊的队列. 也遵守 “先进先出” 的原则.阻塞队列能是一种线程安全的数据结构。本文将通过一些示例为大家详细讲讲阻塞队列的原理与使用,感兴趣的小伙伴可以学习一下
    2022-10-10

最新评论