浅谈访问接口的数据安全性

数据接口的访问有时常常和和身份唯一合法验证有关。

1.通过session来控制

1.1 控制方式

传统做法通过session识别身份,具体步骤

  • 1、通过过滤器拦截请求,判断用户session是否存在。登陆等模块不需要验证身份的特殊处理。
  • 2、通过拦截器拦截方法,判断用户session是否存在,不需要验证登陆加载,通过auth自定义注解区分。此法优于1。

以上两种方法适合简单早期的应用,如遇到应用系统集群,需要解决session共享的问题。又如接口同时提供对外访问。总不能特殊处理再重写一下吧?

1.2 session共享方式

spring boot项目使用tomcat服务器实现session共享的方式,使用redis存储session对象值
(1)添加依赖

        <!--使用redis -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <!--session 共享 -->
        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-data-redis</artifactId>
        </dependency>

(2)在yml中配置redis

spring:
    redis:
        password: 123456
        pool:
            max-active: 21
            max-idle: 8
            max-wait: -1
            min-idle: 0
        sentinel:
            master: sentinel-name
            nodes: 192.168.1.2:6389,192.168.1.3:6390,192.168.1.4:6387
        timeout: 1000

此处配置完全是spring-boot-starter-data-redis相关配置参数,跟spring-session-data-redis无关。后者依赖前者
(3)在项目启动类上添加如下注解@EnableRedisHttpSession
通过@EnableRedisHttpSession注解开启Session共享功能

@Configuration
@EnableRedisHttpSession(maxInactiveIntervalInSeconds= 3600, flushMode  = FlushMode.ON_SAVE)
public class RedisCacheConfig
{
}

注解的主要作用是注册一个SessionRepositoryFilter,这个Filter会拦截到所有的请求,对Session进行操作

2.通过请求中携带cookie或者head身份信息

思路一:

  • 登陆成功后,服务器产生token(生成规则自定:IP+浏览器类型+时间)令牌,返回到客户端token和用户ID(加密)。服务器把toke 对应的用户信息存放session中。
  • 拦截器接收token,通过session从服务器中获取相应的用户信息,如果没有获得(session失效或者服务器不同),则根据用户ID后台自动登录,用户信息再放到session里面。
    重点:请求cookie中携带token和id

思路二:

  • 登录成功后,服务产生token(生成规则:时间 )令牌,令牌存放在redis缓存并且存放在登录信息表。令牌通过head返回。
  • 客户端访问服务器,拦截器接受token,解析token并验证是否过期,从redis读取token
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容