拦截器--检查有没有注解标记,有的话进行操作(更新设置,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 **定义**: Cookie是一种用于在客户端保持状态的方案。简单来说,当你访问一个网站时,该网站可能会在你的计算机上留下一些信息(如用户名、密码等),...
下面将详细解释这两个概念,以及如何创建带有时间戳的Session值和设置Token。 **一、Session** Session是服务器端存储用户状态的一种方式。当用户登录网站时,服务器会为该用户生成一个唯一的Session ID,并将其...
根据提供的文件信息,以下是对文件《Cookie,Session,Token详解.pdf》中知识点的详细解读: 1. Cookie的相关知识 1.1 Cookie不是缓存。它是由服务器创建并存储在客户端的一小段文本信息,通常以字典(键值对)的...
App使用Token 和 RefreshToken 完成登录认证接口,保持登录状态。 这是使用Token和RefreshToken的流程图。
从描述中可以知道,文档的目标是帮助应聘者在面试过程中对Session、Cookie、Token有一个全面的了解,确保他们能够自信地回答面试官的问题,避免面试中遇到相关问题时感到困惑或不自信。 在标签"面试 php session ...
在移动应用开发中,"APP登录token值"是至关重要的安全机制之一。Token是一种轻量级的身份认证方式,用于在用户成功登录后提供一种安全的身份标识。本文将深入讲解APP登录过程中token的生成、存储与使用,以及涉及的...
Struts2提供了一种机制,即tokenSession,来解决这个问题。 首先,我们要理解什么是重复提交。在Web环境中,由于网络延迟或用户误操作,可能会导致同一个表单数据被多次提交,这就是重复提交。这种现象可能导致数据...
APP使用token和refreshToken实现接口身份认证,保持登录状态
### tokenSession拦截器详解 #### 一、引言 在Web开发中,为了防止用户重复提交表单数据,通常会采用各种技术手段进行控制。在Java Web应用开发中,Struts2框架提供了一种非常实用的方法来解决这个问题——通过...
Cookie、Session、Token、JWT.xmind
session 与 token 特性,让你更加了解 session 与 token ,更合理的 使用 session 与 token。
- **持久性**:Cookie可以设置为持久化,即使浏览器关闭后仍保留,而Session和Token通常在会话结束时失效。 - **状态管理**:Cookie需要服务器记住每个用户的会话,而Token则可以实现无状态服务器。 - **跨域支持**...
苹果APP,安卓APP,后端接口调用通用TOKEN安全验证,在开发中APP没有后台,数据都是通过JSON数据进行互动的,在网上公开调用JSON数据很不安全,所以产生了TOKEN验证,此验证大大增加了接口调用的安全性。此资源虽小...
本文主要讲解 App 令牌的一个 Token 实现,解决了使用 session 来判断登陆验证的不足,通过定义一个 Token 类来存储 token,包括字符串和时间戳,并实现了 Token 的管理类来维护 Token。 Token 类的实现 在 Token....
在Web开发中,Session、Cookie和Token是三种常见的身份验证机制,它们各有特点,并在不同的场景下发挥着关键作用。理解它们的关系以及Cookie的局限性对于构建安全的Web应用程序至关重要。 首先,让我们来探讨...
PHP 在做APP后台时用到的TOKEN验证功能,现已封装成类,使用很方便,有完整的生成与验证机制,可控制TOKEN过期时间,生成端经过加密处理生成的TOKEN字符,验证端解密后再验证TOKEN真正的TOKEN也是经过加密验证的,二...
Cookie、Session、Token、JWT 是常用于身份验证和状态管理的概念和技术。它们在Web应用程序中起到关键的作用。 Cookie:Cookie 是服务器在客户端存储的小型数据文件。它通常用于在客户端存储用户的身份验证信息或...
cookie-session-tokencookie、session、token简介为了解决HTTP无状态,无法保存用户状态的问题产生了cookie和session1.服务端收到用户账号密码后,完成登录生成一个全局变量的session会话,作为所有鉴权脚本的通行证...
带token的米家app