`
y806839048
  • 浏览: 1127019 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

更新设置,session,token(PC,APP)

 
阅读更多

 拦截器--检查有没有注解标记,有的话进行操作(更新设置,session,token,服务器给我们web设置session,token的就是用的这种原理)

1,服务生成session,token,在客户端登陆成功的时候将session,token返回给客户端(同时服务器会自己存下一份在map(K-V)中),客户端存在浏览器中(cookie),session就存在服务器的当前线程中(threadlocal)

2,客户端在请求的时候,把自己的sessiion,token,作为参数参数一起带到服务器请求

3,服务器将客户端的K用来获取自己的V,再将客户端的V和自己用客户端K从map获取的V比较,匹配的就放行,同时刷新session(防止sesion失效)(权限就相当于用于app端的注解标签)

用这个我们给app做接口时候也是如此(拦截器+上标签标记)(拦截所有请求,有此标签的就处理此逻辑)

在自己写工具类保存session等信息的时候也是拦截器,拦截到就保存一次session(这样可以拦截所有用户的请求,至于刷新我们Pc端自己会有操作就会刷新,我们不必关心)

真正用户保存在session中的就是一个地方---在登录的时候,拦截器(工具类)只是不断保存此线程sesson,并负责取出

 

 

//这样没有权限的session验证不了,直接复制链接的没有session信息的不能登录

 

在登录的时候保存到session,专门用一个工具类拦截保存此session(session的操作是叠加的(同一个session)),并且通过这个工具类获取,

 

                        // threadlocal可以保存字符串,也可以保存对象,保存对像的时候,用泛型声明即可,记得将此类的对象set如

这样达到当前变量保存在当前线程中,取得化由于是拿到当前threadLocal,之后的当然是当前程中的

private static ThreadLocal<WebInfo> threadLocal = new NamedThreadLocal<WebInfo>("SpringWebHolder");

   @Override

   public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

WebInfo webInfo=new WebInfo(request,response);

threadLocal.set(webInfo);

return super.preHandle(request, response, handler);

   }

 

===================================================================

 

 

package com.esteel.until;

 

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

 

import org.springframework.core.NamedThreadLocal;

import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

 

 

 

public class SpringWebHolder extends HandlerInterceptorAdapter {

    private static ThreadLocal<WebInfo> threadLocal = new NamedThreadLocal<WebInfo>("SpringWebHolder");

    @Override

    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        WebInfo webInfo=new WebInfo(request,response);

        threadLocal.set(webInfo);

        return super.preHandle(request, response, handler);

    }

    public static HttpServletRequest getRequest() {

      return threadLocal.get().getRequest();

    }

 

    public static HttpServletResponse getResponse() {

        return threadLocal.get().getResponse();

    }

 

    public static HttpSession getSession() {

        return threadLocal.get().getRequest().getSession();

    }

 

    public static User getCurrentUser() {

        return (User) threadLocal.get().getRequest().getSession().getAttribute("LOGIN_USER");

    }

 

    public static Employee getCurrentEmployee() {

        return (Employee) threadLocal.get().getRequest().getSession().getAttribute("CURR_EMPLOYEE");

    }

    public static Long getCurrentPlatFormId() {

        return (Long) threadLocal.get().getRequest().getSession().getAttribute("CURR_PLATFORM_ID");

    }

   private class WebInfo{

       private HttpServletRequest request;

       private HttpServletResponse response;

       public WebInfo(HttpServletRequest request,HttpServletResponse response){

           this.request=request;

           this.response=response;

       }

 

       public HttpServletRequest getRequest() {

          return this.request;

       }

 

       public HttpServletResponse getResponse() {

           return this.response;

       }

   }

}

 

 

 

 

======================================================

 

对于shiro来说他已经提供了这么一个工具类,只要在登录成功的地方调用此工具类即可

这里的过程相反:1工具类2,session,3保存进入用户等进入sesion,上面的工具类是1,用户写入session,2,sesion放入工具类、

本质一样都是threadlocal变;量

this.setSession("currentUser", user);//登录成功后

 

 

/**

* 将一些数据放到ShiroSession中,以便于其它地方使用

* @see 比如Controller,使用时直接用HttpSession.getAttribute(key)就可以取到

*/

private void setSession(Object key, Object value) {

Subject currentUser = SecurityUtils.getSubject();//当前线程的信息

if (null != currentUser) {

Session session = currentUser.getSession();

if (null != session) {

session.setAttribute(key, value);

}

}

 

 

获取:

                Subject currentUser = SecurityUtils.getSubject();

Session session1 = currentUser.getSession();//currentUser

OpmUser user=(OpmUser) session1.getAttribute("currentUser");

 

 

=========================

 

在springmvc中HttpServletRequest request, HttpServletResponse response,HttpSession session,Model model 等这些类似上下文信息服务器会自动传给mvc的跳转方法

 

 

@RequestMapping(value = "/account/tbCusFirmWeb/list")

public void tbConFeeList(TbCusFirmWebVo tbCusFirmWeb,Model model, HttpSession session, HttpServletRequest request)

 

}

@RequestMapping("/account/tbCusFirmWeb/basbedList")

public void  spsxList(@RequestParam(value = "warekind_key", required = false) String warekind_key,

            HttpServletRequest request,HttpServletResponse response,Model model) throws EsteelException {}

分享到:
评论

相关推荐

    Cookie、Session和Token三者的区别及使用

    ### Cookie、Session与Token的区别及使用详解 #### 一、Cookie **定义**: Cookie是一种用于在客户端保持状态的方案。简单来说,当你访问一个网站时,该网站可能会在你的计算机上留下一些信息(如用户名、密码等),...

    创建带时间戳的session值,以及设置token

    下面将详细解释这两个概念,以及如何创建带有时间戳的Session值和设置Token。 **一、Session** Session是服务器端存储用户状态的一种方式。当用户登录网站时,服务器会为该用户生成一个唯一的Session ID,并将其...

    Cookie,Session,Token详解.pdf

    根据提供的文件信息,以下是对文件《Cookie,Session,Token详解.pdf》中知识点的详细解读: 1. Cookie的相关知识 1.1 Cookie不是缓存。它是由服务器创建并存储在客户端的一小段文本信息,通常以字典(键值对)的...

    Spring Cloud Feign统一设置验证token实现方法解析

    Spring Cloud Feign统一设置验证token实现方法解析 Spring Cloud Feign是一个基于Netflix的Feign组件,提供了一个简洁的方式来构建RESTful风格的微服务接口。Feign组件提供了一个统一的接口调用方式,使得微服务...

    APP使用token和refreshToken实现保持登录状态.vsdx

    App使用Token 和 RefreshToken 完成登录认证接口,保持登录状态。 这是使用Token和RefreshToken的流程图。

    一次搞明白 Session、Cookie、Token,面试问题全搞定.pdf

    从描述中可以知道,文档的目标是帮助应聘者在面试过程中对Session、Cookie、Token有一个全面的了解,确保他们能够自信地回答面试官的问题,避免面试中遇到相关问题时感到困惑或不自信。 在标签"面试 php session ...

    APP 登录token值

    在移动应用开发中,"APP登录token值"是至关重要的安全机制之一。Token是一种轻量级的身份认证方式,用于在用户成功登录后提供一种安全的身份标识。本文将深入讲解APP登录过程中token的生成、存储与使用,以及涉及的...

    JavaEE Struts2利用tokenSession防止重复提交

    Struts2提供了一种机制,即tokenSession,来解决这个问题。 首先,我们要理解什么是重复提交。在Web环境中,由于网络延迟或用户误操作,可能会导致同一个表单数据被多次提交,这就是重复提交。这种现象可能导致数据...

    APP使用token和refreshToken实现接口身份认证,保持登录状态.vsdx

    APP使用token和refreshToken实现接口身份认证,保持登录状态

    tokenSession拦截器的使用

    ### tokenSession拦截器详解 #### 一、引言 在Web开发中,为了防止用户重复提交表单数据,通常会采用各种技术手段进行控制。在Java Web应用开发中,Struts2框架提供了一种非常实用的方法来解决这个问题——通过...

    Cookie、Session、Token、JWT.xmind

    Cookie、Session、Token、JWT.xmind

    session vs token 使用特性.md

    session 与 token 特性,让你更加了解 session 与 token ,更合理的 使用 session 与 token。

    login for cookie or session or token

    - **持久性**:Cookie可以设置为持久化,即使浏览器关闭后仍保留,而Session和Token通常在会话结束时失效。 - **状态管理**:Cookie需要服务器记住每个用户的会话,而Token则可以实现无状态服务器。 - **跨域支持**...

    安卓,苹果,APP开发验证专用TOKEN.zip.zip

    苹果APP,安卓APP,后端接口调用通用TOKEN安全验证,在开发中APP没有后台,数据都是通过JSON数据进行互动的,在网上公开调用JSON数据很不安全,所以产生了TOKEN验证,此验证大大增加了接口调用的安全性。此资源虽小...

    app令牌的一个token实现

    本文主要讲解 App 令牌的一个 Token 实现,解决了使用 session 来判断登陆验证的不足,通过定义一个 Token 类来存储 token,包括字符串和时间戳,并实现了 Token 的管理类来维护 Token。 Token 类的实现 在 Token....

    Session、Cookie、Token的关系。以及Cookie的局限性

    在Web开发中,Session、Cookie和Token是三种常见的身份验证机制,它们各有特点,并在不同的场景下发挥着关键作用。理解它们的关系以及Cookie的局限性对于构建安全的Web应用程序至关重要。 首先,让我们来探讨...

    PHP APP开发 token 生成与验证封装类

    PHP 在做APP后台时用到的TOKEN验证功能,现已封装成类,使用很方便,有完整的生成与验证机制,可控制TOKEN过期时间,生成端经过加密处理生成的TOKEN字符,验证端解密后再验证TOKEN真正的TOKEN也是经过加密验证的,二...

    Cookie、Session、Token、JWT

    Cookie、Session、Token、JWT 是常用于身份验证和状态管理的概念和技术。它们在Web应用程序中起到关键的作用。 Cookie:Cookie 是服务器在客户端存储的小型数据文件。它通常用于在客户端存储用户的身份验证信息或...

    cookie-session-token:cookie、session、token简介

    cookie-session-tokencookie、session、token简介为了解决HTTP无状态,无法保存用户状态的问题产生了cookie和session1.服务端收到用户账号密码后,完成登录生成一个全局变量的session会话,作为所有鉴权脚本的通行证...

    MiHome_6.2.702_63607_vevs.apk 带token的米家app

    带token的米家app

Global site tag (gtag.js) - Google Analytics