在 REST API 中使用 Spring Security 与 JWT

创建一个基础的 Spring 应用 在开始配置 Spring Security 框架之前,让我们先创建一个基础的 Spring Web 应用。为此,我们可以使用 Spring Initializr 生成一个模板工程。对于一个简单的 web 应用,依赖 Spring web 框架就足够了:

org.springframework.boot spring-boot-starter-web 创建好工程之后,我们可以像下面一样添加一个简单的 REST controller:

@RestController @RequestMapping("hello") public class HelloRestController {

@GetMapping("user")
public String helloUser() {
    return "Hello User";
}

@GetMapping("admin")
public String helloAdmin() {
    return "Hello Admin";
}

} 做完这些后,如果我们构建并运行这个工程,我们可以在浏览器中访问下面的地址。

http://localhost:8080/hello/user 会返回字符串 Hello User。 http://localhost:8080/hello/admin 会返回字符串 Hello Admin。 现在,我们可以把 Spring Security 框架加到我们的工程里,我们可以通过添加下面的依赖到我们的 pom.xml 文件里:

org.springframework.boot spring-boot-starter-security 通常将其它的 Spring 框架引入到工程里的时候,除非提供一些相应的配置,一般都不会立刻生效,但是 Spring Security 框架不同,它是会立刻生效的,这通常会让新手很困惑。在添加了依赖后,如果我们重新构建跟运行工程,然后再次访问上面提到的 URL,我们就看不到返回结果而会被重定向到 http://localhost:8080/login。这是默认的行为,因为Spring Security 框架要求对所有的 URL 提供开箱即用的认证。

为了通过认证,我们可以使用默认的用户名 user 然后在控制台输出中找到自动生成的密码:

Using generated security password: 1fc15145-dfee-4bec-a009-e32ca21c77ce 请记住,这个密码当我们应用每次重启时都会修改。如果我们想要改变这种行为并且指定密码,我们可以添加下面的配置到我们的 application.properties 文件里:

spring.security.user.password=Test12345_

现在,如果我们在登录框里输入凭证,我们会被重定向到我们的 URL 并且看见正确的结果。请注意,这个开箱即用的认证过程是基于 session 的,如果我们想要登出,我们可以访问这个 URL:http://localhost:8080/logout

这种开箱即用的行文对于传统基于 session 认证的 MVC web 应用来说可能很有用,但是对于单页应用,在大多数场景都没什么用,我们是客户端渲染而且是基于 JWT 的无状态认证方式。在这种场景下,我们不得不深度定制 Spring Security 框架,我们将在本文余下的部分介绍。

作为示例,我们实现了一个经典的书店应用,并且创建了一个后端,可以提供创建作者和书籍 CRUD API ,外加用户管理与认证的 API。

本文由博客一文多发平台 OpenWrite 发布!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值