Spring Cloud Security系列教程一:入门
来源:互联网 发布:男生用什么护肤品知乎 编辑:程序博客网 时间:2024/05/16 09:58
本篇有一定的学习曲线,建议先花一点时间了解一下前置知识:
- Spring Security:http://docs.spring.io/spring-security/site/docs/4.2.2.RELEASE/reference/htmlsingle/
- OAuth2(重点),参考文档:http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html
- Spring Security OAuth2,参考文档:http://docs.spring.io/spring-boot/docs/1.5.2.RELEASE/reference/htmlsingle/#boot-features-security-oauth2
熟悉以上前置知识后,我们进入Spring Cloud Security的学习。在本例中,我们来使用GitHub的账号和密码来登录我们编写的应用。
准备工作
(1) 前往https://github.com/settings/developers,点击“Register a new application”按钮,添加一个应用。点击按钮后,界面如下图所示。
(2) 点击“Register application”按钮,即可出现如下图的界面。
记住这边的Client ID以及Client Secret,后面有用。
至此,准备工作就完成了。
编码
在这里,我们正式进行编码。
(1) 创建项目,并添加以下依赖:
123456789101112131415161718192021222324252627
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.2.RELEASE</version><relativePath/></parent><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-oauth2</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-security</artifactId></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Camden.SR5</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>
即:为应用添加spring-cloud-starter-oauth2、spring-cloud-starter-security两个依赖。
(2) 编写启动类:
123456789101112131415161718192021222324252627282930313233343536373839
public class SecurityApplication {public static void main(String[] args) {SpringApplication.run(SecurityApplication.class, args);}"/welcome")(public String welcome() {return "welcome";}"/user")(public Principal user(Principal user) {return user;}// 实现基于OAuth2的单点登录,建议跟踪进代码阅读以下该注解的注释,很有用2Ssopublic static class SecurityConfiguration extends WebSecurityConfigurerAdapter {public void configure(HttpSecurity http) throws Exception {http.antMatcher("/**")// 所有请求都得经过认证和授权.authorizeRequests().anyRequest().authenticated().and().authorizeRequests().antMatchers("/","/anon").permitAll().and()// 这里之所以要禁用csrf,是为了方便。// 否则,退出链接必须要发送一个post请求,请求还得带csrf token// 那样我还得写一个界面,发送post请求.csrf().disable()// 退出的URL是/logout.logout().logoutUrl("/logout").permitAll()// 退出成功后,跳转到/路径。.logoutSuccessUrl("/");}}}
如代码所示,在这里,我们使用@EnableOAuth2Sso
注解,启用了“基于OAuth2的单点登录”,做了一些安全配置;同时,还定义了两个端点,/welcome
端点返回“welcome”字符串,/user
端点返回当前登录用户的认证信息。
这里说明一下,@EnableOAuth2Sso
注解。如果WebSecurityConfigurerAdapter
类上注释了@EnableOAuth2Sso
注解,那么将会添加身份验证过滤器和身份验证入口。
- 如果只有一个
@EnableOAuth2Sso
注解没有编写在WebSecurityConfigurerAdapter
上,那么它将会为所有路径启用安全,并且会在基于HTTP Basic认证的安全链之前被添加。 - 详见
@EnableOAuth2Sso
的注释。
(3) 编写配置文件
12345678910111213141516171819
server:port: 8080security:user:password: user # 直接登录时的密码ignored: /sessions: never # session策略oauth2:sso:loginPath: /login # 登录路径client:clientId: 你的clientIdclientSecret: 你的clientSecretaccessTokenUri: https://github.com/login/oauth/access_tokenuserAuthorizationUri: https://github.com/login/oauth/authorizeresource:userInfoUri: https://api.github.com/userpreferTokenInfo: false
配置文件中的地址可参考该文档来配置:https://developer.github.com/v3/oauth/。
这样,代码就编写完成了。
测试
(1) 启动应用。
(2) 访问http://localhost:8080/login,将会跳转到GitHub,进行认证。
(3) 认证通过后,访问http://localhost:8080/user,可看到当前用户的信息。
(4) 访问http://localhost:8080/logout,可正常退出应用。
配套代码
(1) https://github.com/itmuch/spring-cloud-security-samples/tree/master/security-1
(2) http://git.oschina.net/itmuch/spring-cloud-security-samples/tree/master/security-1
- Spring Cloud Security系列教程一:入门
- 《Spring Security教程系列》一.Spring Security简介
- spring security 教程入门
- Spring Security教程(一)
- Spring Security入门一
- Spring Cloud入门一:Spring Cloud Config
- spring cloud 入门实践系列
- spring cloud 入门实践系列
- spring cloud 入门实践系列
- spring cloud 入门实践系列
- spring cloud 入门实践系列
- spring cloud 入门实践系列
- Spring Cloud 入门系列总结
- Spring Security 系列教程(2)
- Spring Cloud Eureka 入门 (一)服务注册中心详解 「Spring Cloud Eureka 入门系列」 Spring Cloud Eureka 入门 (一)服务注册中心详解 Spr
- Spring Cloud Security
- SpringBoot系列—Spring Cloud快速入门
- Spring Security 系列教程-Hello World
- 中文乱码在java中URLEncoder.encode方法要调用两次解决 (原理)
- CentOS 7之Systemd详解之服务单元设置system.service
- 获取linux命令的源码
- redis缓存
- 高德地图Web端JavaScript API开发(一)---个性化展示(自定义地图)
- Spring Cloud Security系列教程一:入门
- Android增量更新
- tensorflow快速整体认识
- apache ab命令压力测试
- oracle中的connect by函数的使用
- 通过eclipse把spring boot项目打包成war包并部署到tomcat服务器上的步骤
- VS2015工程目录结构 + OpenCV环境配置 的最优解决方案
- linux 下安装.tar.gz文件的安装方法
- 二维码扫描与生成二维码