博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Cloud Security系列教程一:入门
阅读量:6701 次
发布时间:2019-06-25

本文共 3503 字,大约阅读时间需要 11 分钟。

本篇有一定的学习曲线,建议先花一点时间了解一下前置知识:

  • Spring Security:
  • OAuth2(重点),参考文档:
  • Spring Security OAuth2,参考文档:

熟悉以上前置知识后,我们进入Spring Cloud Security的学习。在本例中,我们来使用GitHub的账号和密码来登录我们编写的应用。

准备工作

(1) 前往,点击“Register a new application”按钮,添加一个应用。点击按钮后,界面如下图所示。

cloud-security-01.png

(2) 点击“Register application”按钮,即可出现如下图的界面。

cloud-security-02.png

记住这边的Client ID以及Client Secret,后面有用。

至此,准备工作就完成了。

编码

在这里,我们正式进行编码。

(1) 创建项目,并添加以下依赖:

org.springframework.boot
spring-boot-starter-parent
1.5.2.RELEASE
org.springframework.cloud
spring-cloud-starter-oauth2
org.springframework.cloud
spring-cloud-starter-security
org.springframework.cloud
spring-cloud-dependencies
Camden.SR5
pom
import

即:为应用添加spring-cloud-starter-oauth2、spring-cloud-starter-security两个依赖。

(2) 编写启动类:

@SpringBootApplication@RestControllerpublic class SecurityApplication {    public static void main(String[] args) {        SpringApplication.run(SecurityApplication.class, args);    }    @GetMapping("/welcome")    public String welcome() {        return "welcome";    }    @RequestMapping("/user")    public Principal user(Principal user) {        return user;    }    @Component    @EnableOAuth2Sso // 实现基于OAuth2的单点登录,建议跟踪进代码阅读以下该注解的注释,很有用    public static class SecurityConfiguration extends WebSecurityConfigurerAdapter {        @Override        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) 编写配置文件

server:  port: 8080security:  user:    password: user  # 直接登录时的密码  ignored: /  sessions: never   # session策略  oauth2:    sso:      loginPath: /login   # 登录路径    client:      clientId: 你的clientId      clientSecret: 你的clientSecret      accessTokenUri: https://github.com/login/oauth/access_token      userAuthorizationUri: https://github.com/login/oauth/authorize    resource:      userInfoUri: https://api.github.com/user      preferTokenInfo: false

配置文件中的地址可参考该文档来配置:。

这样,代码就编写完成了。

测试

(1) 启动应用。

(2) 访问,将会跳转到GitHub,进行认证。

(3) 认证通过后,访问,可看到当前用户的信息。

(4) 访问,可正常退出应用。

配套代码

(1)

(2)

本文链接:

**版权声明: **本博客由创作,采用 许可协议。可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。

你可能感兴趣的文章
大话 char、varchar、 nchar、nvarchar之间"剪不断理还乱"的关系
查看>>
系统数据库
查看>>
JAVA: java产生随机数的几种方式
查看>>
调试发现的小错误
查看>>
c#中使用NetCDF存储二维数据的读写操作简单应用
查看>>
移动终端处理器构成和基带芯片概述
查看>>
Android 动态加载 (一) 态加载机制 案例一
查看>>
Oracle存储过程中异步调用的实际操作步骤
查看>>
Atitti.java android反编译解决方案-----虚拟机方案
查看>>
Java 装饰模式 (Decorator)
查看>>
JAVA虚拟机垃圾回收算法原理
查看>>
PHP开启curl_init
查看>>
动态规划法求背包问题
查看>>
【maven + hibernate(注解) +spring +springMVC】 使用maven搭建项目
查看>>
Mybatis-mapper-xml-基础
查看>>
如何在Visual Studio VS中定义多项目模板
查看>>
tcpip学习
查看>>
yii2权限控制rbac之菜单menu最详细教程
查看>>
国内四大炒股软件APP 全面技术解析
查看>>
C++ STL--queue 的使用方法
查看>>