Cookie的使用

本文介绍了Cookie,它是网络服务器发送存储在浏览器的小量信息,有内存受限、有生命周期、满足同源策略等特点。还提到在Spring Boot中通过OncePerRequestFilter获取请求值,以及Spring Security的认证和授权。最后涉及pom依赖和后端接口对cookie信息的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

“Cookie”是小量信息,由网络服务器发送出来以存储在网络浏览器上,从而下次这位独一无二的访客又回到该网络服务器时,可从该浏览器读回此信息。Cookie 是个存储在浏览器目录的文本文件,当浏览器运行时,存储在 RAM 中。一旦你从该网站或网络服务器退出,Cookie 也可存储在计算机的硬驱上。

Cookie的特点

Cookie内存大小受限

Cookie具有生命周期

Cookie可以保持登录信息到用户下次与服务器的会话。

Cookie在生成时就会被指定一个Expire值,这就是Cookie的生存周期,在这个周期内Cookie有效,超出周期Cookie就会被清除。

Cookie满足同源策略

网站同属,域名不一样,不能互相操作彼此的Cookie。

通过Filter获取请求的值,OncePerRequestFilter是spring boot中实现filter的抽象类,确保在一次请求中只需要一次filter,而不需要重复执行;在使用SpringSecurity过程中,SpringSecurity中的Filter可能被加载了两次或多次的情况。

@Component
public class CookieFilter extends OncePerRequestFilter {
    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException{
        Cookie[] cookies = request.getCookies();
        UserAuthentication userAuthentication = new UserAuthentication();
        if(cookies !=null){
            for(Cookie cookie :cookies){
                if("sso_user".equals(cookie.getName())){
                    userAuthentication.setName(cookie.getValue());
                }
                if("sso_user_cn".equals(cookie.getName())){
               userAuthentication.setNameCN(URLDecoder.decode(cookie.getValue()));
                }
                if("sso_email".equals(cookie.getName())){
                    userAuthentication.setEmail(cookie.getValue() );
                }
            }
        }
        SecurityContextHolder.getContext().setAuthentication(userAuthentication);
        filterChain.doFilter(request,response);
    }
}

UserAuthentication实体类保存从Cookie中获取的值,Authentication是Spring Security中实现安全访问控制。Spring Security的安全访问控制分为Authentication(认证)和Authorization(授权)。认证指的是用户登录的信息验证,判断你账号密码是否正确;授权指的是当用户访问一个页面时判断他有没有这个权限。

public class UserAuthentication implements Authentication {
    private static final long serialVersionUID = 1L;
    private String name;
    private String email;
    private String nameCN;
    @Override
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        return null;
    }
    @Override
    public Object getCredentials() {
        return null;
    }
    @Override
    public Object getDetails() {
        return null;
    }
    @Override
    public Object getPrincipal() {
        return null;
    }
    @Override
    public boolean isAuthenticated() {
        return false;
    }
    @Override
    public void setAuthenticated(boolean isAuthenticated) throws IllegalArgumentException {
    }
    public String getNameCN() {
        return nameCN;
    }
    public void setNameCN(String nameCN) {
        this.nameCN = nameCN;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }

pom依赖

<dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-core</artifactId>
</dependency>

在后端接口中对cookie信息的使用

UserAuthentication userAuthentication = (UserAuthentication) SecurityContextHolder.getContext().getAuthentication();
            String staffNamePY = userAuthentication.getName();

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值