做网站需多少钱开封 网站建设 网络推广

news/2025/10/1 4:09:41/文章来源:
做网站需多少钱,开封 网站建设 网络推广,百度seo优化推广公司,百度seo刷排名网址获取用户信息 // 获取安全上下文对象#xff0c;就是那个保存在 ThreadLocal 里面的安全上下文对象 // 总是不为null(如果不存在#xff0c;则创建一个authentication属性为null的empty安全上下文对象) SecurityContext securityContext SecurityContextHolder.getContext(…获取用户信息 // 获取安全上下文对象就是那个保存在 ThreadLocal 里面的安全上下文对象 // 总是不为null(如果不存在则创建一个authentication属性为null的empty安全上下文对象) SecurityContext securityContext SecurityContextHolder.getContext();// 获取当前认证了的 principal(当事人),或者 request token (令牌) // 如果没有认证会是 null,该例子是认证之后的情况 Authentication authentication securityContext.getAuthentication()// 获取当事人信息对象返回结果是 Object 类型但实际上可以是应用程序自定义的带有更多应用相关信息的某个类型。 // 很多情况下该对象是 Spring Security 核心接口 UserDetails 的一个实现类你可以把 UserDetails 想像 // 成我们数据库中保存的一个用户信息到 SecurityContextHolder 中 Spring Security 需要的用户信息格式的 // 一个适配器。 Object principal authentication.getPrincipal(); if (principal instanceof UserDetails) {String username ((UserDetails)principal).getUsername(); } else {String username principal.toString(); }SecurityContextHolder SecurityContextHolder持有的是安全上下文的信息当前操作的用户是谁用户是否已经被认证他拥有哪些角色权限等这些都被保存在SecurityContextHolder中。SecurityContextHolder默认使用ThreadLocal策略来存储认证信息在web环境下SpringSecurity在用户登录时自动绑定认证信息到当前线程在用户退出时自动清除当前线程的认证信息 public class SecurityContextHolder {// 三种工作模式的定义每种工作模式对应一种策略public static final String MODE_THREADLOCAL MODE_THREADLOCAL;public static final String MODE_INHERITABLETHREADLOCAL MODE_INHERITABLETHREADLOCAL;public static final String MODE_GLOBAL MODE_GLOBAL;// 类加载时首先尝试从环境属性中获取所指定的工作模式public static final String SYSTEM_PROPERTY spring.security.strategy; private static String strategyName System.getProperty(SYSTEM_PROPERTY);private static SecurityContextHolderStrategy strategy;// 初始化计数器,初始为0,// 1. 类加载过程中会被初始化一次此值变为1// 2. 此后每次调用 setStrategyName 会对新的策略对象执行一次初始化相应的该值会增1private static int initializeCount 0;static {initialize();}/*** 清除上下文*/public static void clearContext() {strategy.clearContext();}/*** 获取上下文*/public static SecurityContext getContext() {return strategy.getContext();}/*** 获取计数器的值*/public static int getInitializeCount() {return initializeCount;}private static void initialize() {if (!StringUtils.hasText(strategyName)) {// Set default, 设置缺省工作模式/策略 MODE_THREADLOCALstrategyName MODE_THREADLOCAL;}if (strategyName.equals(MODE_THREADLOCAL)) {strategy new ThreadLocalSecurityContextHolderStrategy();} else if (strategyName.equals(MODE_INHERITABLETHREADLOCAL)) {strategy new InheritableThreadLocalSecurityContextHolderStrategy();} else if (strategyName.equals(MODE_GLOBAL)) {strategy new GlobalSecurityContextHolderStrategy();} else {// Try to load a custom strategytry {Class? clazz Class.forName(strategyName);Constructor? customStrategy clazz.getConstructor();strategy (SecurityContextHolderStrategy) customStrategy.newInstance();}catch (Exception ex) {ReflectionUtils.handleReflectionException(ex);}}initializeCount;}/*** 设置上下文*/public static void setContext(SecurityContext context) {strategy.setContext(context);}/*** 设置工作模式*/public static void setStrategyName(String strategyName) {SecurityContextHolder.strategyName strategyName;initialize();}/*** 获取对应工作模式的策略*/public static SecurityContextHolderStrategy getContextHolderStrategy() {return strategy;}/*** 创建空的上下文信息*/public static SecurityContext createEmptyContext() {return strategy.createEmptyContext();}public String toString() {return SecurityContextHolder[strategy strategyName ; initializeCount initializeCount ];} }SecurityContext 安全上下文主要持有Authentication对象如果用户未鉴权那么Authentication对象将会是空的 public interface SecurityContext extends Serializable {/*** 获取当前经过身份验证的主体或身份验证请求令牌*/Authentication getAuthentication();/*** 更改当前经过身份验证的主体或删除身份验证信息*/void setAuthentication(Authentication authentication); }Authentication 鉴权对象该对象主要包含了用户的详细信息UserDetails和用户鉴权所需要的信息如用户提交的用户名密码、Remember-me Token或digest hash值等按不同鉴权方式使用不同的Authentication实现 public interface Authentication extends Principal, Serializable {//用来获取用户的权限。Collection? extends GrantedAuthority getAuthorities();//用来获取用户凭证一般来说就是密码。Object getCredentials();//用来获取用户携带的详细信息可能是当前请求之类的东西。Object getDetails();//用来获取当前用户可能是一个用户名也可能是一个用户对象。Object getPrincipal();//判断当前用户是否认证成功。boolean isAuthenticated();//设置用户是否认证成功void setAuthenticated(boolean var1) throws IllegalArgumentException; }GrantedAuthority 表示了当前用户所拥有的权限或角色信息这些信息由授权负责对象AccessDecisionManager来使用并决定最终用户是否可以访问某资源URL或方法调用或域对象鉴权使并不会使用到该对象 public interface GrantedAuthority extends Serializable {//获取当前用户所拥有的权限或角色信息String getAuthority(); }UserDetailsService 提供一个接口loadUserByUsername(String username)一般通过扩展该接口显式获取我们的用户信息用户登陆时传递的用户名和密码也是通过这里查找出来的用户名和密码进行校验真正的校验由AuthenticationManager和AuthenticationProvider负责的。如果用户不存在时应返回NULL而是抛出异常UsernameNotFoundException public interface UserDetailsService {UserDetails loadUserByUsername(String var1) throws UsernameNotFoundException; }UserDetails 规范了用户详细信息所拥有的字段如用户名、密码、账号是否过期、是否锁定等在SpringSecurity中获取当前登录的用户的信息一般情况是需要在该接口上面进行扩展 public interface UserDetails extends Serializable {// 返回权限集合Collection? extends GrantedAuthority getAuthorities();// 获取密码String getPassword();// 获取用户名String getUsername();// 判断用户是否未过期boolean isAccountNonExpired();// 判断账户是否未锁定boolean isAccountNonLocked();// 判断用户凭证是否没过期即密码是否未过期boolean isCredentialsNonExpired();// 判断用户是否可用boolean isEnabled(); }安全身份认证流程 过滤器链 认证流程 Spring Security定义了一个过滤器链当认证请求到达这个链时该请求将会穿过这个链条用于认证和授权这个链上可以定义1~N个过滤器过滤器的用途是获取请求中的认证信息根据认证方法进行路由把认证信息传递给对应的认证处理程序进行处理不同的过滤器处理不同的认证信息 HTTP Basic认证通过过滤器链到达BasicAuthenticationFilterHTTP Digest认证被DigestAuthenticationFilter识别拦截并处理表单登录认证被UsernamePasswordAuthenticationFilter识别拦截并处理 基于用户凭证创建AuthenticationToken 如用户在登录表单中输入用户名和密码并点击确定浏览器提交POST请求到服务器穿过过滤器链被UsernamePasswordAuthenticationFilter识别UsernamePasswordAuthenticationFilter提取请求中的用户名和密码来创建UsernamePasswordAuthenticationToken对象 把组装好的AuthenticationToken传递给AuthenticationManager 如组装好的UsernamePasswordAuthenticationToken对象被传递给AuthenticationManager的authenticate方法进行认证决策AuthenticationManager只是一个接口实际的实现是ProviderManager ProviderManager委托给AuthenticationProvider进行认证处理 AuthenticationProvider提供了不同的实现类ProviderManager会把收到的UsernamePasswordAuthenticationToken对象传递给列表中的每一个AuthenticationProvider进行认证那UsernamePasswordAuthenticationToken会被哪一个接收和处理呢是由supports方法来决定的 UserDetailsService获取用户信息 例如DaoAuthenticationProvider通过UserDetailsService查找对应的用户信息 认证结果处理 例如如果认证成功用户名和密码完全正确AuthenticationProvider将会返回一个完全有效的Authentication对象UsernamePasswordAuthenticationToken否则抛出AuthenticationException异常 认证完成后AuthenticationManager将会返回该认证对象UsernamePasswordAuthenticationToken返回给过滤器 存储认证对象。相关的过滤器获得一个认证对象后把他存储在安全上下文中SecurityContext用于后续的授权判断

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/923488.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站建设的功能描述上海小程序设计

导言: 在当今数字化时代,.mallab勒索病毒以其险恶的特性和神秘的名称引起了广泛关注。为了更深入了解这种威胁,我们需要揭示.mallab勒索病毒背后的神秘面纱,了解它的运作方式以及预防它的方法。如果受感染的数据确实有恢复的价值…

太原网站空间不断推进门户网站建设

今后的推进计划方针 信息数学物理 信息 线段树,其它的随缘。 数学 三角函数(必修3)-> 对数函数和指数函数 物理 随缘

山西住房与城乡建设厅定额网站中国城乡建设协会网站

在产品管理的世界里,产品就像有生命的个体,经历着从诞生到消亡的过程。作为产品经理,深刻理解产品的四个生命周期 —— 引入期、成长期、成熟期和衰退期,是打造成功产品的关键。 引入期:破局的起点 对于 B 端产品而言&…

网站开发时如何设计英文版本小程序登录入口官网网址

Android常用开源项目 Android 2014-05-23 16:39:43 发布您的评价: 4.3 收藏 24收藏Android开源项目第一篇——个性化控件(View)篇包括ListView、ActionBar、Menu、ViewPager、Gallery、GridView、ImageView、ProgressBar、TextView、其他Android开源项目第二篇——工具库…

nodejs可以做企业网站吗苏州保洁公司多少钱一个平方

来源:OneFlow社区作者:River Riddle、Eric Johnson、Abdul Dakak翻译:胡燕君、杨婷机器学习模型逐渐发展成人们口中的“庞然大物”。全球顶尖的科技公司纷纷踏上“军备竞赛”之路,立志训练出规模最大的模型(MUM、OPT、…

洛阳网站建站网站开发原型

在PHP中,数组排序是一项常见且重要的操作,它允许开发者根据一定的规则对数组中的元素进行排序。PHP提供了多种数组排序函数,以适应不同的排序需求。这些函数包括基本的升序和降序排序,以及基于特定键值、自定义排序逻辑等的复杂排…

毕业设计网站开发要做什么网站类型分析

叉车被广泛应用于工厂车间、仓库、流通中心和配送中心等,大大提高了对成件托盘货物进行装卸、堆垛和短距离运输作业的运输效率,几乎是所有车间必不可少的运输工具。但目前,简单方便的同时,安全事故(剐蹭、碰撞、碾压、撞车等)却也…

网站经营性备案难不难新乡网页设计公司

在插入空白行的时候,如果是在画好的表格下插入,api提供的插入空白行会插入没有任何格式的一行,无法匹配合并了单元格的表格格式,需要手动编写api 1.找到api.js,在src/global中,新增一个方法 /*** 复制有合并单元格的…

南通网站建设公司排名如何做自己网站

文章目录 环境搭建开发与组件使用性能优化与监控安全与隐私总结 🎈个人主页:程序员 小侯 🎐CSDN新晋作者 🎉欢迎 👍点赞✍评论⭐收藏 ✨收录专栏:大数据系列 ✨文章内容: 🤝希望作者…

ai设计网站手机访问另一部手机访问文件

小菜鸟一枚,学习cocos2d-x已经有一段时间了,感觉进度非常慢那,CSDN也再次拾了起来。近期自己还在学习做小游戏,跟着前辈做了《忍者打怪物》的小游戏,又学习了瓦片游戏《吃西瓜》,打算自个做个坦克大战&…

soho网站建设医疗公司logo设计图片

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

深圳网站建设设计首选公司网络营销平台的类型

微服务架构是一种软件架构风格,它将应用程序构建为一组小的、独立的服务,每个服务围绕特定的业务功能进行开发和部署。每个微服务都可以独立运行、独立部署,并通过轻量级的通信机制(如 HTTP/REST、gRPC 或消息队列)进行交互。 微服务架构的优势: 1. 独立性: 每个微服务…

江苏和城乡建设厅网站网站设计公司官网

言叶是一个功能丰富的笔记软件,为跨平台而设计,可以为你在手机、电脑和其他设备中实现多端同步。从而实现高效率的记事和办公。支持Markdown的语言和多种计算机语法高亮功能,让你笔记中的内容更加主次分明,可以在这里记录一些代码什么的。同时还可以在笔记中插入图片,使其…

什么网站可以卖自己做的东西自动引流推广app

1.什么是权限管理系统?权限管理是一个几乎所有后台系统的都会涉及的一个重要组成部分,可以说是后台项目的基本功,主要目的是对整个后台管理系统进行权限的控制,而针对的对象是员工,避免因权限控制缺失或操作不当引发的…

wordpress tdk焦作做网站优化

文章目录 前言一、准备项目二、在Jenkins中创建项目三、Jenkins项目配置:General四、Jenkins项目配置:源码管理五、Jenkins项目配置:Build六、Jenkins项目配置:Post Steps1、创建项目启动脚本2、创建Dockerfile文件3、构建镜像4、推送镜像到私有库七、Jenkins开始构建八、检…

wordpress构建企业网站网站搭建价格

Linux chattr命令介绍 chattr命令是change file attributes on a Linux file system的缩写,主要用于改变文件或目录的属性。这个命令允许管理员控制谁可以修改文件或目录,或者在什么情况下可以修改。 Linux chattr命令适用的Linux版本 chattr命令在大…

广西南宁网站建设最便宜的企业邮箱多少钱一年

一、Vue3的watch侦听器&#xff1a; 1、基础用法侦听单个数据 导入watch函数执行watch函数传入要侦听的响应式数据(ref对象)和回调函数 <template><button click"add">{{ count }}</button> <template><script>//导入watchimport {…

网络工程毕业后干什么拱墅抖音seo搜索排名推广

一、Time 在Flink的流式处理中&#xff0c;会涉及到时间的不同概念 Event Time&#xff1a;是事件创建的时间。它通常由事件中的时间戳描述&#xff0c;例如采集的日志数据中&#xff0c;每一条日志都会记录自己的生成时间&#xff0c;Flink通过时间戳分配器访问事件时间戳 Ing…

无锡华庄行业网站建设wordpress实现静态化

多进程/线程最早的服务器端程序都是通过多进程、多线程来解决并发IO的问题。进程模型出现的最早&#xff0c;从Unix 系统诞生就开始有了进程的概念。最早的服务器端程序一般都是 Accept 一个客户端连接就创建一个进程&#xff0c;然后子进程进入循环同步阻塞地与客户端连接进行…

【半导体器件 | 笔记】金属氧化物半导体场效应晶体管(MOSFET)

目录前置MOS结构基础理想MOS结构回顾Delta-耗尽层模型非理想因素MOSFET基础参数与定义定性分析理想长沟道MOSFET缓变沟道近似(GCA)反型层电荷密度和阈值电压直流I-V特性理想MOSFET的电荷-电压特性理想MOSFET的频率响…