JavaWeb之session应用

简介: session和cookie都是用来存储信息的,区别是session是在服务器端存储信息,而cookie则是在浏览器端存储信息。通常服务器端存储session,服务器端存储和获取session,一般情况下是比较安全的,不排除黑客侵袭的情况下。

session和cookie都是用来存储信息的,区别是session是在服务器端存储信息,而cookie则是在浏览器端存储信息。

通常服务器端存储session,服务器端存储和获取session,一般情况下是比较安全的,不排除黑客侵袭的情况下。不过cookie的话,容易因为cookie欺骗而导致安全性问题。

当然了,现在因为token的流行和应用广泛,使用cookie也不怕安全性问题。

 

将用户信息存储到session中可以参考如下代码:

@PostMapping(value = "/login",produces="application/json;charset=utf-8")
    @SysLog(type="后台系统",action="登录功能",method="POST")
    @ApiOperation(value="登录",httpMethod="POST",notes="若登录后token未过期则返回原token,并按照预先定义的有效时间顺延,若过期则生成新token,有效期默认10小时")
    public JSONObject getLockPwd(@RequestParam String username, @RequestParam String password, HttpSession session,HttpServletResponse response) {
        //接收前台参数
        logger.info("用户名:"+username);
        logger.info("密码:"+password);
        //调用查询逻辑
        EntityWrapper<SysUser> wrapper = new EntityWrapper<SysUser>();
        wrapper.eq("login_code", username);
        SysUser user = userService.selectOne(wrapper);
        
        JSONObject json = new JSONObject();
        
        if(user != null && "0".equals(user.getStatus())) {
            //获取当前用户
            Subject subject = SecurityUtils.getSubject();  
            
            //根据前台传的用户名和密码进行认证
            UsernamePasswordToken token = new UsernamePasswordToken(username, password);         
      
            try {
                //认证通过
                subject.login(token); 
            
                String encode = Base64.encode(user.getUserCode());
                
                //Cookie有效期默认为8小时
                int time=28800;
                
                //将Cookie加密为16进制字符串
                CookieUtils.setCookie(response,  "userCode", encode, time);

                user.setLastLoginDate(DateUtil.date());
                userService.updateById(user);
                
                //将userCode放入session中保存
                session.setAttribute("userCode", user.getUserCode());
                
                json.put("token", subject.getSession().getId());
                json.put(CommonEnum.RETURN_CODE, "000000");
                json.put(CommonEnum.RETURN_MSG, "登录成功");
            } catch (IncorrectCredentialsException e) {
                json.put(CommonEnum.RETURN_CODE, "111111");
                json.put(CommonEnum.RETURN_MSG, "用户名或密码错误");
            }catch (Exception e) {
                json.put(CommonEnum.RETURN_CODE, "222222");
                json.put(CommonEnum.RETURN_MSG, "特殊异常");
            }
        }else {
            json.put(CommonEnum.RETURN_CODE, "500");
            json.put(CommonEnum.RETURN_MSG, "用户不存在");
        }    
        
        return json;

    }
    

 

关键就是session.setAttribute("userCode", user.getUserCode())这段代码

 

关于Cookie加密或者是用Cookie存储信息和清除Cookie,可以参考我的这篇文章:js之清除Cookie

 

如果获取session,参考如下代码:

 

 
        HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
        
        //获取session
        String userCode = (String) request.getSession().getAttribute("userCode");
        

 

目录
相关文章
|
2月前
|
人工智能 安全 Java
Java和Python在企业中的应用情况
Java和Python在企业中的应用情况
84 7
|
4天前
|
Java 编译器 开发者
Java中的this关键字详解:深入理解与应用
本文深入解析了Java中`this`关键字的多种用法
35 9
|
4天前
|
Java 应用服务中间件 API
【潜意识Java】javaee中的SpringBoot在Java 开发中的应用与详细分析
本文介绍了 Spring Boot 的核心概念和使用场景,并通过一个实战项目演示了如何构建一个简单的 RESTful API。
23 5
|
4天前
|
人工智能 自然语言处理 搜索推荐
【潜意识Java】了解并详细分析Java与AIGC的结合应用和使用方式
本文介绍了如何将Java与AIGC(人工智能生成内容)技术结合,实现智能文本生成。
27 5
|
4天前
|
前端开发 Java 数据库连接
【潜意识Java】深度解读JavaWeb开发在Java学习中的重要性
深度解读JavaWeb开发在Java学习中的重要性
21 4
|
4天前
|
SQL Java 数据库连接
【潜意识Java】深入理解MyBatis,从基础到高级的深度细节应用
本文详细介绍了MyBatis,一个轻量级的Java持久化框架。内容涵盖MyBatis的基本概念、配置与环境搭建、基础操作(如创建实体类、Mapper接口及映射文件)以及CRUD操作的实现。此外,还深入探讨了高级特性,包括动态SQL和缓存机制。通过代码示例,帮助开发者更好地掌握MyBatis的使用技巧,提升数据库操作效率。总结部分强调了MyBatis的优势及其在实际开发中的应用价值。
15 1
|
1月前
|
安全 算法 Java
Java CAS原理和应用场景大揭秘:你掌握了吗?
CAS(Compare and Swap)是一种乐观锁机制,通过硬件指令实现原子操作,确保多线程环境下对共享变量的安全访问。它避免了传统互斥锁的性能开销和线程阻塞问题。CAS操作包含三个步骤:获取期望值、比较当前值与期望值是否相等、若相等则更新为新值。CAS广泛应用于高并发场景,如数据库事务、分布式锁、无锁数据结构等,但需注意ABA问题。Java中常用`java.util.concurrent.atomic`包下的类支持CAS操作。
64 2
|
2月前
|
缓存 Java 开发者
Java多线程并发编程:同步机制与实践应用
本文深入探讨Java多线程中的同步机制,分析了多线程并发带来的数据不一致等问题,详细介绍了`synchronized`关键字、`ReentrantLock`显式锁及`ReentrantReadWriteLock`读写锁的应用,结合代码示例展示了如何有效解决竞态条件,提升程序性能与稳定性。
254 6
|
1月前
|
监控 Java 数据库连接
Java线程管理:守护线程与用户线程的区分与应用
在Java多线程编程中,线程可以分为守护线程(Daemon Thread)和用户线程(User Thread)。这两种线程在行为和用途上有着明显的区别,了解它们的差异对于编写高效、稳定的并发程序至关重要。
51 2
|
2月前
|
关系型数据库 MySQL Java
MySQL索引优化与Java应用实践
【11月更文挑战第25天】在大数据量和高并发的业务场景下,MySQL数据库的索引优化是提升查询性能的关键。本文将深入探讨MySQL索引的多种类型、优化策略及其在Java应用中的实践,通过历史背景、业务场景、底层原理的介绍,并结合Java示例代码,帮助Java架构师更好地理解并应用这些技术。
83 2