首页 文章 精选 留言 我的

精选列表

搜索[redis],共8746篇文章
优秀的个人博客,低调大师

java版spring cloud+spring boot+redis社交电子商务平台-SSO单点登录之OAuth2.0登录认证

之前写了很多关于spring cloud的文章,今天我们对OAuth2.0的整合方式做一下笔记,首先我从网上找了一些关于OAuth2.0的一些基础知识点,帮助大家回顾一下知识点: 一、oauth中的角色 client:调用资源服务器API的应用 Oauth 2.0 Provider:包括Authorization Server和Resource Server (1)Authorization Server:认证服务器,进行认证和授权 (2)Resource Server:资源服务器,保护受保护的资源 user:资源的拥有者 二、下面详细介绍一下Oauth 2.0 Provider Authorization Server: (1)AuthorizationEndpoint:进行授权的服务,Default URL: /oauth/authorize (2)TokenEndpoint:获取token的服务,Default URL: /oauth/token Resource Server: OAuth2AuthenticationProcessingFilter:给带有访问令牌的请求加载认证 三、下面再来详细介绍一下Authorization Server: 一般情况下,创建两个配置类,一个继承AuthorizationServerConfigurerAdapter,一个继承WebSecurityConfigurerAdapter,再去复写里面的方法。 主要出现的两种注解: 1、@EnableAuthorizationServer:声明一个认证服务器,当用此注解后,应用启动后将自动生成几个Endpoint:(注:其实实现一个认证服务器就是这么简单,加一个注解就搞定,当然真正用到生产环境还是要进行一些配置和复写工作的。) /oauth/authorize:验证 /oauth/token:获取token /oauth/confirm_access:用户授权 /oauth/error:认证失败 /oauth/check_token:资源服务器用来校验token /oauth/token_key:如果jwt模式则可以用此来从认证服务器获取公钥 以上这些endpoint都在源码里的endpoint包里面。 2、@Beans:需要实现AuthorizationServerConfigurer AuthorizationServerConfigurer包含三种配置: ClientDetailsServiceConfigurer:client客户端的信息配置,client信息包括:clientId、secret、scope、authorizedGrantTypes、authorities (1)scope:表示权限范围,可选项,用户授权页面时进行选择 (2)authorizedGrantTypes:有四种授权方式 Authorization Code:用验证获取code,再用code去获取token(用的最多的方式,也是最安全的方式) Implicit: 隐式授权模式 Client Credentials (用來取得 App Access Token) Resource Owner Password Credentials (3)authorities:授予client的权限 这里的具体实现有多种,in-memory、JdbcClientDetailsService、jwt等。 AuthorizationServerSecurityConfigurer:声明安全约束,哪些允许访问,哪些不允许访问 AuthorizationServerEndpointsConfigurer:声明授权和token的端点以及token的服务的一些配置信息,比如采用什么存储方式、token的有效期等 client的信息的读取:在ClientDetailsServiceConfigurer类里面进行配置,可以有in-memory、jdbc等多种读取方式。 jdbc需要调用JdbcClientDetailsService类,此类需要传入相应的DataSource. 下面再介绍一下如何管理token: AuthorizationServerTokenServices接口:声明必要的关于token的操作 (1)当token创建后,保存起来,以便之后的接受访问令牌的资源可以引用它。 (2)访问令牌用来加载认证 接口的实现也有多种,DefaultTokenServices是其默认实现,他使用了默认的InMemoryTokenStore,不会持久化token; token存储方式共有三种分别是:(1)InMemoryTokenStore:存放内存中,不会持久化 (2)JdbcTokenStore:存放数据库中 (3)Jwt: json web token 授权类型: 可以通过AuthorizationServerEndpointsConfigurer来进行配置,默认情况下,支持除了密码外的所有授权类型。相关授权类型的一些类: (1)authenticationManager:直接注入一个AuthenticationManager,自动开启密码授权类型 (2)userDetailsService:如果注入UserDetailsService,那么将会启动刷新token授权类型,会判断用户是否还是存活的 (3)authorizationCodeServices:AuthorizationCodeServices的实例,auth code 授权类型的服务 (4)implicitGrantService:imlpicit grant (5)tokenGranter: endpoint的URL的配置: (1)AuthorizationServerEndpointsConfigurer的pathMapping()方法,有两个参数,第一个是默认的URL路径,第二个是自定义的路径 (2)WebSecurityConfigurer的实例,可以配置哪些路径不需要保护,哪些需要保护。默认全都保护。 自定义UI: (1)有时候,我们可能需要自定义的登录页面和认证页面。登陆页面的话,只需要创建一个login为前缀名的网页即可,在代码里,设置为允许访问,这样,系统会自动执行你的登陆页。此登陆页的action要注意一下,必须是跳转到认证的地址。 (2)另外一个是授权页,让你勾选选项的页面。此页面可以参考源码里的实现,自己生成一个controller的类,再创建一个对应的web页面即可实现自定义的功能。 下面梳理一下授权获取token流程: (1)端口号换成你自己的认证服务器的端口号,client_id也换成你自己的,response_type类型为code。 localhost:8080/uaa/oauth/authorize?client_id=client&response_type=code&redirect_uri=http://www.baidu.com(2)这时候你将获得一个code值:http://www.baidu.com/?code=G0C20Z (3)使用此code值来获取最终的token: curl -X POST -H “Cant-Type: application/x-www-form-urlencoded” -d ‘grant_type=authorization_code&code=G0C20Z&redirect_uri=http://www.baidu.com’ “http://client:secret@localhost:8080/uaa/oauth/token” 返回值: {“access_token”:“b251b453-cc08-4520-9dd0-9aedf58e6ca3”,“token_type”:“bearer”,“expires_in”:2591324,“scope”:“app”} (4)用此token值来调用资源服务器内容(如果资源服务器和认证服务器在同一个应用中,那么资源服务器会自己解析token值,如果不在,那么你要自己去做处理) curl -H “Authorization: Bearer b251b453-cc08-4520-9dd0-9aedf58e6ca3” “localhost:8081/service2(此处换上你自己的url)” 四、Resource Server:保护资源,需要令牌才能访问 在配置类上加上注解@EnableResourceServer即启动。使用ResourceServerConfigurer进行配置: (1)tokenServices:ResourceServerTokenServices的实例,声明了token的服务 (2)resourceId:资源Id,由auth Server验证。 (3)其它一些扩展点,比如可以从请求中提取token的tokenExtractor (4)一些自定义的资源保护配置,通过HttpSecurity来设置 使用token的方式也有两种: (1)Bearer Token(https传输方式保证传输过程的安全):主流 (2)Mac(http+sign) 如何访问资源服务器中的API? 如果资源服务器和授权服务器在同一个应用程序中,并且您使用DefaultTokenServices,那么您不必太考虑这一点,因为它实现所有必要的接口,因此它是自动一致的。如果您的资源服务器是一个单独的应用程序,那么您必须确保您匹配授权服务器的功能,并提供知道如何正确解码令牌的ResourceServerTokenServices。与授权服务器一样,您可以经常使用DefaultTokenServices,并且选项大多通过TokenStore(后端存储或本地编码)表示。 (1)在校验request中的token时,使用RemoteTokenServices去调用AuthServer中的/auth/check_token。 (2)共享数据库,使用Jdbc存储和校验token,避免再去访问AuthServer。 (3)使用JWT签名的方式,资源服务器自己直接进行校验,不借助任何中间媒介。 五、oauth client 在客户端获取到token之后,想去调用下游服务API时,为了能将token进行传递,可以使用RestTemplate.然后使用restTemplate进行调用Api。 注: scopes和authorities的区别: scopes是client权限,至少授予一个scope的权限,否则报错。 authorities是用户权限。 以上是我从网上找到的一篇写的不错的博客,希望可以帮助大家快速了解OAuth2.0,下一篇文章我们正式介绍OAuth2.0在当前框架中的使用。 从现在开始,我这边会将近期研发的spring cloud微服务云架构的搭建过程和精髓记录下来,帮助更多有兴趣研发spring cloud框架的朋友,大家来一起探讨spring cloud架构的搭建过程及如何运用于企业项目。

优秀的个人博客,低调大师

阿里云Linux服务器的搭建过程(包括JDK、Tomcat、Redis、MySQL的安装)及遇到的问题与处理:(二)Tomcat的安装

第一篇我们讲了JDK的安装,安装完毕后,我们就已经搭建了一个Java程序能够运行的环境,我们都知道,基于Java开发的服务端的程序,需要在容器中才能使用,所以这里我们讲下期中一种服务器容器Tomcat的安装,安装完Tomcat,你开发的服务端代码就可以在服务器环境下真正的运行起来了 下载Tomcat 下载Tomcat的官方网址:link 在这里选择你想要的版本,这里我选择Tomcat 8的版本,点击之后选择相应的系统环境的压缩包这里我们选择tar.gz的版本点击之后下载,下载完毕后,我们使用Xftp工具在/urs/java下新建一个tomcat的文件夹,并将下载好的Tomcat安装包上传至服务器上传完毕后打开XShell,进行下一步骤 安装Tomcat 执行命令cd ../usr/java/tomcat, 进入tomcat文件夹下,然后再执行命令:tar -xzvf apache-tomcat-8.5.29.tar.gz, 或者也可以直接执行命令:tar -xzvf apache-tomcat-8.5.29.tar.gz -C /usr/java/tomcat 执行完毕之后,在tomcat文件夹下可以看见解压出来的文件夹然后进入该文件夹下的bin目录使用ll命令,我们可以看到bin目录下的所有内容,可以看见里面有一个setclasspath.sh的文件,执行命令:vim setclasspath.sh在最下方加入:export JAVA_HOME=/usr/java/jdk/1.8.0_162保存后退出。 启动Tomcat 在启动之前先执行下命令:netstat -apn|grep 8080看下Tomcat的默认端口8080是否被占用。如果被占用会出现下图的信息显示 如果被占用则需要修改Tomcat的端口。 进入conf文件夹执行命令:vim server.xml找到<Connector/>标签,将里面的端口号修改后保存退出完成后进入bin目录下,执行命令:./startup.sh 启动完毕后依次执行命令:cd ../logstail -200f catalina.out如果没有报错就说明启动成功。打开浏览器输入http://ip:8080如果看到这个网页说明你的Tomcat启动成功了 tomcat启动成功了但是无法连接到服务器如何处理第一次使用阿里云的小伙伴大多数都会遇到一个问题,就是我服务器明明启动成功了,也没报错,但是网页就是怎么也连接不上,遇到这种问题该如何解决。 首先第一步,先将Linux的8080端口上的防火墙关闭,步骤如下: 执行命令:vim /etc/sysconfig/iptables 在文档中添加:-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT 保存关闭。 将iptables重启服务:service iptables restart 之后再次尝试连接服务器,如果还是无法连接上服务器,那就需要登录阿里云,进入你的云服务器实例,找到安全组配置项进入后点击配置规则点击【添加安全组规则】,按图示添加规则后点击确定添加成功后再去尝试连接服务器的8080端口,发现可以登录了。 关闭Tomcat服务关闭Tomcat的服务的方式有两种,一种是执行bin目录下的shutdown.sh文件,不过这里我推荐使用第二种方式。 执行命令:ps -ef|grep tomcat我们可以看到当前tomcat的进程的一些信息这里我的tomcat的进程号可以看到是5401,找到之后执行命令:kill -9 5401这样就可以停止当前的tomcat服务了。

优秀的个人博客,低调大师

阿里云Linux服务器的搭建过程(包括JDK、Tomcat、Redis、MySQL的安装)及遇到的问题与处理:(一)JDK的安装

前两天,搞了个Linux系统想尝试一下如何搭建一个服务器,在过程中遇到了一些问题,我觉得需要做个记录。PS:阿里云服务器的购买啥的我就不细说了。 一切都准备就绪之后,首先,是Linux命令。因为之前在工作中很少接触Linux操作,所以除了常见的cd、ll、ls、./等命令符有些操作都需要通过资料查阅来确认。这些操作接下来的搭建过程中会一一说明。 XShell、Xftp的使用。首先,我们需要准备两款软件:XShell和Xftp,XShell用于连接Linux系统,执行Linux命令,Xftp用于上传文件至Linux服务器上,软件的下载和安装在这里就不做说明,网上搜索引擎搜索下就有。下载完毕后打开XShell,新建一个会话,输入IP地址等基本信息后,点击确认,如下图: 连接成功后会提示输入用户名密码,对应地输入系统的用户名和密码就ok了,然后就可以肆无忌惮地操作Linux系统了。如果你需要传一些文件等至服务器时,可以打开Xftp进行操作,打开Xftp的方式有两种:一种是在XShell连接上服务器后,点击【窗口】→【传输新建文件】(快捷键:Ctrl+Alt+F)就OK了。第二种方法就是打开Xftp软件手动创建会话,这种方式比较步骤太多,等于重复了一遍XShell新建会话的操作。做好如上准备后,准备开始搭建Java的运行环境JDK了。 2.JDK的安装 先去JDK官网上下载所需版本的JDK压缩包,如图所示选择对应的JDK版本,我这里选择的是jdk-8u162-linux-x64.tar.gz版本。下载完毕后将JDK上传至服务器,这里我在系统的/usr文件夹下新建了一个文件夹,命名为java,再在java文件夹下创建一个文件夹命名为jdk,然后将JDK包上传至/usr/java/jdk的路径下,如图所示:上传完毕后,打开XShell,通过命令进入/usr/java/jdk文件夹下,使用命令cd ../usr/java/jdk直接就可以进入,如果不熟练Linux的用户,可以一步一步拆解命令进行操作。总之最终目的就是进入jdk文件夹。进入jdk文件夹后,输入命令:tar -xzvf jdk-8u162-linux-x64.tar.gz,将JDK包解压缩至当前文件夹下熟悉Linux的人可以直接执行命令tar -xzvf jdk-8u162-linux-x64.tar.gz -C /usr/java/jdk解压完毕之后,执行命令vim /etc/profile,进入环境变量编辑界面,输入i 进入编辑模式。如图在下方输入三行代码:export JAVA_HOME=/usr/java/jdk/jdk1.8.0_162export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/libexport PATH=$JAVA_HOME/bin:$PATH输入完毕后,按Esc退出编辑,并输入:wq回车后保存文本修改并退出。退出之后执行命令source /etc/profile可以使配置不用重启就能生效,然后执行命令java version如果安装成功就能看到当前的jdk版本这里显示当前java的版本为1.8.0_162

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册