本文共 3503 字,大约阅读时间需要 11 分钟。
本篇有一定的学习曲线,建议先花一点时间了解一下前置知识:
熟悉以上前置知识后,我们进入Spring Cloud Security的学习。在本例中,我们来使用GitHub的账号和密码来登录我们编写的应用。
(1) 前往,点击“Register a new application”按钮,添加一个应用。点击按钮后,界面如下图所示。
(2) 点击“Register application”按钮,即可出现如下图的界面。
记住这边的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)
本文链接:
**版权声明: **本博客由创作,采用 许可协议。可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。