iis5.1发布网站软件技术专业专升本考试科目

diannao/2026/1/23 8:20:34/文章来源:
iis5.1发布网站,软件技术专业专升本考试科目,公司起名字大全免费取名,新东方考研培训机构官网目录 引言 一、什么是单点登录#xff08;SSO#xff09;#xff1f; 二、SSO的工作原理 三、SSO的具体实现 SSO的核心概念 1. 令牌#xff08;Token#xff09;机制 2. 身份验证协议 SSO实现步骤 1. 选择身份验证协议 2. 创建认证服务器 3. 创建资源服务器 4.…目录 引言 一、什么是单点登录SSO 二、SSO的工作原理 三、SSO的具体实现 SSO的核心概念 1. 令牌Token机制 2. 身份验证协议 SSO实现步骤 1. 选择身份验证协议 2. 创建认证服务器 3. 创建资源服务器 4. 客户端集成 总结 引言 随着互联网应用的不断发展用户需要在多个系统之间无缝切换而单点登录Single Sign-On简称SSO技术应运而生。本篇博客将深入探讨Java中如何实现单点登录通过详细代码和深度解析带领读者逐步了解SSO的原理、流程和具体实现。 一、什么是单点登录SSO 单点登录是一种身份认证的机制允许用户在访问多个相关但独立的软件系统时只需一次登录便可无缝访问所有系统。这大大提高了用户体验并简化了管理和维护的复杂性。 二、SSO的工作原理 SSO的工作原理基于令牌Token和身份验证协议。用户一旦登录系统将获得一个令牌该令牌包含了用户的身份信息。在之后的访问中用户只需提供该令牌而无需再次输入用户名和密码。 三、SSO的具体实现 SSO的核心概念 在深入代码之前让我们先理解SSO的核心概念。 1. 令牌Token机制 SSO通过使用令牌实现用户的无缝切换。用户在登录成功后获得一个令牌该令牌包含了用户的身份信息。在之后的访问中用户只需提供有效的令牌而无需再次输入用户名和密码。 2. 身份验证协议 常见的身份验证协议包括OAuth 2.0和OpenID Connect。OAuth 2.0主要用于授权而OpenID Connect在OAuth 2.0的基础上提供了身份验证的支持。 SSO实现步骤 1. 选择身份验证协议 在我们的实现中我们选择使用OAuth 2.0和OpenID Connect协议。这两者的结合提供了强大的身份验证和授权机制。 2. 创建认证服务器 认证服务器是SSO系统的核心。我们使用Spring Security OAuth2和Spring Boot来实现一个简单但强大的认证服务器。 创建认证服务器是实现单点登录SSO系统的关键步骤之一。在这里我们将使用Spring Security OAuth2和Spring Boot创建一个简单而强大的认证服务器。以下是详细的代码示例 // 认证服务器配置类 Configuration EnableAuthorizationServer public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {Autowiredprivate AuthenticationManager authenticationManager;Autowiredprivate UserDetailsService userDetailsService;Autowiredprivate DataSource dataSource;Value(${security.oauth2.client.client-id})private String clientId;Value(${security.oauth2.client.client-secret})private String clientSecret;Value(${security.oauth2.client.authorized-grant-types})private String[] authorizedGrantTypes;Value(${security.oauth2.client.scopes})private String[] scopes;Overridepublic void configure(ClientDetailsServiceConfigurer clients) throws Exception {clients.jdbc(dataSource);}Overridepublic void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {endpoints.authenticationManager(authenticationManager).userDetailsService(userDetailsService);}Overridepublic void configure(AuthorizationServerSecurityConfigurer security) throws Exception {security.tokenKeyAccess(permitAll()).checkTokenAccess(isAuthenticated());}Beanpublic JdbcTokenStore tokenStore() {return new JdbcTokenStore(dataSource);}Beanpublic TokenStoreUserApprovalHandler userApprovalHandler(TokenStore tokenStore) {TokenStoreUserApprovalHandler handler new TokenStoreUserApprovalHandler();handler.setTokenStore(tokenStore);handler.setRequestFactory(new DefaultOAuth2RequestFactory(clientId));handler.setClientDetailsService(clientDetailsService());handler.setUseApprovalStore(true);return handler;}Beanpublic ApprovalStore approvalStore(TokenStore tokenStore) {TokenApprovalStore store new TokenApprovalStore();store.setTokenStore(tokenStore);return store;}Beanpublic ClientDetailsService clientDetailsService() {return new JdbcClientDetailsService(dataSource);}Beanpublic DefaultTokenServices tokenServices() {DefaultTokenServices tokenServices new DefaultTokenServices();tokenServices.setTokenStore(tokenStore());tokenServices.setSupportRefreshToken(true);tokenServices.setClientDetailsService(clientDetailsService());tokenServices.setAuthenticationManager(authenticationManager);return tokenServices;}Beanpublic BCryptPasswordEncoder passwordEncoder() {return new BCryptPasswordEncoder();}Beanpublic OAuth2RequestFactory requestFactory() {return new DefaultOAuth2RequestFactory(clientDetailsService());}BeanPrimarypublic DefaultTokenServices defaultTokenServices() {DefaultTokenServices defaultTokenServices new DefaultTokenServices();defaultTokenServices.setTokenStore(tokenStore());defaultTokenServices.setSupportRefreshToken(true);defaultTokenServices.setClientDetailsService(clientDetailsService());return defaultTokenServices;}Beanpublic BCryptPasswordEncoder bCryptPasswordEncoder() {return new BCryptPasswordEncoder();}Beanpublic DataSourceInitializer dataSourceInitializer(DataSource dataSource) {DataSourceInitializer initializer new DataSourceInitializer();initializer.setDataSource(dataSource);initializer.setDatabasePopulator(databasePopulator());return initializer;}private DatabasePopulator databasePopulator() {ResourceDatabasePopulator populator new ResourceDatabasePopulator();populator.addScript(new ClassPathResource(schema.sql));return populator;} }上述代码中我们配置了认证服务器的各个方面包括客户端信息、用户信息、令牌存储、用户批准处理等。这是一个基础配置你可以根据实际需求进行调整和扩展。 此外为了更好地演示我们在配置中引入了一些外部配置例如client-id、client-secret、authorized-grant-types、scopes你可以在应用的配置文件中定义这些属性。 通过这个认证服务器的配置我们为SSO系统打下了坚实的基础。接下来你可以继续配置资源服务器、客户端应用并深入了解OAuth2和OpenID Connect协议的更多细节。 3. 创建资源服务器 在单点登录SSO系统中资源服务器的作用是验证令牌并提供受保护的资源。以下是使用Spring Security实现资源服务器的详细代码示例 // 资源服务器配置类 Configuration EnableResourceServer public class ResourceServerConfig extends ResourceServerConfigurerAdapter {Value(${security.oauth2.resource.id})private String resourceId;Overridepublic void configure(ResourceServerSecurityConfigurer resources) throws Exception {resources.resourceId(resourceId);}Overridepublic void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers(/public/**).permitAll().antMatchers(/api/**).authenticated();} }在上述代码中我们配置了资源服务器的两个主要部分资源ID和HTTP安全性。 configure(ResourceServerSecurityConfigurer resources) 方法用于配置资源服务器的资源ID。资源ID是资源服务器标识自身的唯一标识符与授权服务器中的配置相对应。 configure(HttpSecurity http) 方法定义了资源服务器的HTTP安全性配置。在这个例子中我们允许对 /public/** 路径的请求进行公开访问而对 /api/** 路径的请求进行身份验证。 请注意你可能需要根据实际应用的需求进行调整和扩展例如更复杂的授权规则、自定义访问决策等。 为了更好地演示我们引入了一个外部配置security.oauth2.resource.id你可以在应用的配置文件中定义这个属性。 这个资源服务器配置类将帮助你在SSO系统中建立一个安全的资源服务确保只有合法的用户通过有效的令牌能够访问受保护的资源。接下来你可以继续配置客户端应用使其能够通过令牌访问资源服务器上的资源。 4. 客户端集成 在单点登录SSO系统中客户端应用需要集成认证服务器以获取令牌并访问资源服务器。以下是使用Spring Security OAuth2 Client实现客户端集成的详细代码示例 // 客户端配置类 Configuration EnableOAuth2Client public class OAuth2ClientConfig {Autowiredprivate OAuth2RestTemplate restTemplate;Beanpublic OAuth2RestTemplate restTemplate(OAuth2ProtectedResourceDetails resource) {return new OAuth2RestTemplate(resource);}Beanpublic OAuth2ProtectedResourceDetails resourceDetails() {AuthorizationCodeResourceDetails details new AuthorizationCodeResourceDetails();details.setClientId(client-id);details.setClientSecret(client-secret);details.setAccessTokenUri(http://localhost:8080/oauth/token);details.setUserAuthorizationUri(http://localhost:8080/oauth/authorize);details.setScope(Arrays.asList(read, write));return details;}Beanpublic RequestInterceptor oauth2FeignRequestInterceptor(OAuth2ClientContext oAuth2ClientContext,OAuth2ProtectedResourceDetails resource) {return new OAuth2FeignRequestInterceptor(oAuth2ClientContext, resource);} }在上述代码中我们配置了客户端的关键组件 OAuth2RestTemplate: 用于与认证服务器进行交互获取令牌等。 OAuth2ProtectedResourceDetails: 包含了客户端的配置信息如客户端ID、客户端密钥、授权服务器的地址等。 RequestInterceptor: 用于Feign客户端确保在使用Feign进行远程调用时令牌被正确传递。 在实际应用中你可能需要更复杂的配置例如刷新令牌、处理令牌错误、自定义用户信息等。这个配置类提供了一个基础的配置你可以根据具体需求进行扩展。 请注意上述代码中的URL和客户端信息应该与你的认证服务器的配置相匹配。同时你可以在应用的配置文件中定义这些属性以便更好地管理和维护。 通过这个客户端配置你的应用将能够通过OAuth2协议与认证服务器进行交互获取令牌并在需要时访问资源服务器上的受保护资源。这是SSO系统中客户端应用的关键配置。 总结 通过本文我们详细讨论了SSO的核心概念、选择了适当的身份验证协议并提供了完整的Java代码实现。实现SSO系统需要深入理解身份验证协议、使用合适的框架以及合理配置认证和资源服务器。 希望这篇博客能够为你提供深度且全面的SSO实现指南。通过这个实践你将更好地理解和应用SSO技术提升应用的用户体验和安全性。

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

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

相关文章

想在百度做网站有做货 物的网站吗

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言​📝 站在巨人的肩上,是为了超过…

咖啡网站建设市场分析网页开发技术有哪些

mysql>use mysql;mysql>update user set host % where user root;mysql>flush privileges;mysql>select host,user from user where userroot;mysql>quit 转载于:https://www.cnblogs.com/vipstone/p/5541619.html

天津网站建设哪家权威株洲在线论坛招聘求职

文章目录考试复盘matrixsetstring考试复盘 首先先说T1T1T1,嗯,发现了列是相互独立的,所以分开考虑了 但是实在没想到线性基,就顺着自己的思路硬搞了505050跑路 老实说,505050分的部分分写得都是迷迷糊糊的,…

做展示型企业网站仿牌外贸网站推广

目录 一、平台 二、数据 三、代码 3.1 文件组织结构 3.2 lasDataLoader.py 读取数据 3.3 修改原始模型的通道数量 3.4 lasTrainSS.py【训练】 3.5 lasTestSS.py【预测】 一、平台 Windows 10 GPU RTX 3090 CUDA 11.1 cudnn 8.9.6 Python 3.9 Torch 1.9.1 cu111…

镇江网站制作费用电商系统服务好的商家

【QT 5 调试软件Linux下验证>>>>串口相关初试串口参考win下历程基础样例】 1、前言2、实验环境3、先行了解4、自我总结-win下工程切到Linux下1、平台无关的代码:2、依赖的库:3、文件路径和换行符:4、编译器差异:5、构…

网站模板如何优化下列不属于网站建设规划

交换文件 *.swp 格式 同时是隐藏的 如在vim一个文件, 在没有正常退出, 如直接断开连接 在次编辑这个文件 会出现下图的错误 解决方案: 直接删除这个交换文件即可 rm -fr .zen.txt.swp

增加网站点击量黑龙江建设厅官网

Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效,Kubernetes提供了应用部署,规划,更新,维护的一种机制。 Kubernetes一个核心的特点就是能够自主…

东莞做公众号的网站wordpress文章序号排列

##人生苦短,我用python #pandas ##首先讲讲数据格式,csv文件格式,程序之间表格数据之间的转移,如从数据库导入到excel中csv是很合适的转移格式。 #1.纯文本,使用某个字符集,比如ascii,Unicode&a…

机械制造设备类企业网站织梦模板wordpress手机展示

通过一些实际项目的开发,发现这样一个现象,在 Windows 下可以通过指定 __declspec(dllexport) 定义来控制 DLL(动态链接库)中哪些函数可以导出,暴露给其他程序链接使用,哪些函数是 DLL 内部自己使用&#x…

网络购物网站备案山西众邦建设集团网站

1、简述 UDP是无连接的,在UDP传输层中并没有客户端和服务端的概念。但是可以在应用层定义客户端和服务端,可以灵活的互换客户端和服务端,或者同时既是客户端也是服务端。 HP-Socket中在应用层定义了四种UDP组件:UdpClient、UdpS…

做百度微信小程序都有哪些网站有域名有空间怎么做网站

FastReport VCL报表控件是著名的 Delphi 打印控件。含全部源码。支持 Delphi 10.2 Tokyo,FastReport可以在大量的方式报表的创建过程中操纵对象。快速发展的报表和随后的打印,这样的优点,正如预览打印文档的外观。专业版除了报表标准版的功能…

网站制作公司套路网站建设制作介绍河南

2.5.6.22021.10.13支持自定义列字体颜色,具体见PR#342,感谢xiangxiren修复日期格式化的问题,具体见PR#344,感谢ccccccmd2.5.6.12021.10.06修复 #337,bool?类型导出的映射问题2.5.6.02021.10.05合并Magicodes.EPPlus到…

西安专业的网站优化好口碑自适应网站建设

引用:MyBatis的删除、修改、插入操作!!!-CSDN博客的准备工作!!!(准备工作都一样只不过文件名称有所不同) 1.利用原始DAO开发,查询所有的信息。 UserDao&#…

百度竞价找谁做网站企业网站开发工具

卷筒纸不干胶印刷时,纸张的走向与一般印刷方法不同,它是以轴向跳格移动实现套印的,即在印版滚筒上同时装上几套印版,当不干胶在压印平台上每跳移一次,印版滚筒水平方向作往复旋转一次,就可实现印刷一个颜色…

做网站美工的前途怎么样企业管理软件市场规模

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 接上文。 一、1月10号 牛客网公司真题_免费模拟题库_企业面试|笔试真题 1、题目1 …

国外代码开源网站网页制作与网站开发

云计算如今已经变得无处不在,并显著影响着日常生活的各个方面。然而,重要的是要注意云计算技术是不断发展的。最近向远程工作的转变促使企业加快数字化转型,更多地采用云计算服务。 即使在新冠疫情消退之后,云计算技术的采用也获得…

南通做网站优化网站建设一般多少

背景 众所周知,近几年国内用户在访问Github时,经常间歇性无法访问Github。 接下来推荐几款 作为程序员不得不知道的Github加速神器。 推荐1:FastGithub FastGithub是一款Github加速神器,解决github打不开、用户头像无法加载、r…

国外设计网站app吗昆明优秀网站

当应用调用CameraManager#openCamera获取到已打开的camera设备后,会调用createCaptureSession方法来完成camera stream创建和stream的相关配置。在createCaptureSession方法中,首先将应用的surfaces信息封装成可跨binder传递的OutputConfiguration对象&a…

乐清开发网站公司青岛工程建设管理信息网官方网站

题意: 给定前序遍历和中序遍历,问u和v的lca (先是中序,后是中序) 题解: 方法一: 参考题解 将树映射到一颗BST上,在BST上找到答案然后再映射回原本的树 方法二: 参考题…

番禺核酸检测点查询哈尔滨网站seo公司

目录 一、前言 二、通过类型来获取Bean 0.总述(重要) : 1.基本介绍 : 2.应用实例 : 三、通过指定构造器为Bean注入属性 1.基本介绍 : 2.应用实例 : 四、通过p命名空间为Bean注入属性 1.基本介绍 : 2.应用实例 : 五、通过ref引用实现Bean的相…