webflux-example.md 3.5 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13
# Spring WebFlux 集成 Sa-Token 示例

WebFlux基于Reactor响应式模型开发,有着与标准ServletAPI完全不同的底层架构,因此要适配WebFlux, 必须提供与Reactor相关的整合实现,
本篇将以WebFlux为例,展示sa-token与Reactor响应式模型web框架相整合的示例, **你可以用同样方式去对接其它Reactor模型Web框架**

整合示例在官方仓库的`/sa-token-demo-webflux`文件夹下,如遇到难点可结合源码进行测试学习

---

### 1、创建项目
在IDE中新建一个SpringBoot项目,例如:`sa-token-demo-webflux`(不会的同学请自行百度或者参考github示例)


shengzhang_'s avatar
shengzhang_ 已提交
14
### 2、设置依赖
15 16 17 18 19 20 21
`pom.xml` 中添加依赖:

``` xml 
<!-- Sa-Token 权限认证(Reactor响应式集成), 在线文档:http://sa-token.dev33.cn/ -->
<dependency>
	<groupId>cn.dev33</groupId>
	<artifactId>sa-token-reactor-spring-boot-starter</artifactId>
shengzhang_'s avatar
shengzhang_ 已提交
22
	<version>1.16.0.RELEASE</version>
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
</dependency>
```


### 4、创建启动类
在项目中新建包 `com.pj` ,在此包内新建主类 `SaTokenDemoApplication.java`,输入以下代码:

``` java
@SpringBootApplication
public class SaTokenDemoApplication {
	public static void main(String[] args) throws JsonProcessingException {
		SpringApplication.run(SaTokenDemoApplication.class, args);
		System.out.println("启动成功:sa-token配置如下:" + SaTokenManager.getConfig());
	}
}
```

shengzhang_'s avatar
shengzhang_ 已提交
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
### 5、创建全局过滤器
新建`SaTokenConfigure.java`,注册Sa-Token的全局过滤器
``` java
/**
 * [Sa-Token 权限认证] 全局配置类 
 */
@Configuration
public class SaTokenConfigure {
	/**
     * 注册 [sa-token全局过滤器] 
     */
    @Bean
    public SaReactorFilter getSaReactorFilter() {
        return new SaReactorFilter()
        		// 指定 [拦截路由]
        		.addInclude("/**")
        		// 指定 [放行路由]
        		.addExclude("/favicon.ico")
        		// 指定[认证函数]: 每次请求执行 
        		.setAuth(r -> {
        			System.out.println("---------- sa全局认证");
                    // SaRouterUtil.match("/test/test", () -> StpUtil.checkLogin());
        		})
        		// 指定[异常处理函数]:每次[认证函数]发生异常时执行此函数 
        		.setError(e -> {
        			System.out.println("---------- sa全局异常 ");
        			return AjaxJson.getError(e.getMessage());
        		})
        		;
    }
}
```
?> 你只需要按照此格式复制代码即可,有关过滤器的详细用法,会在之后的章节详细介绍


### 6、创建测试Controller
``` java
@RestController
@RequestMapping("/user/")
public class UserController {

	// 测试登录,浏览器访问: http://localhost:8081/user/doLogin?username=zhang&password=123456
	@RequestMapping("doLogin")
	public String doLogin(String username, String password) {
		// 此处仅作模拟示例,真实项目需要从数据库中查询数据进行比对 
		if("zhang".equals(username) && "123456".equals(password)) {
			StpUtil.setLoginId(10001);
			return "登录成功";
		}
		return "登录失败";
	}

	// 查询登录状态,浏览器访问: http://localhost:8081/user/isLogin
	@RequestMapping("isLogin")
	public String isLogin(String username, String password) {
		return "当前会话是否登录:" + StpUtil.isLogin();
	}
	
}
```

### 7、运行
启动代码,从浏览器依次访问上述测试接口:
103

shengzhang_'s avatar
shengzhang_ 已提交
104
![运行结果](https://oss.dev33.cn/sa-token/doc/test-do-login.png)
105

shengzhang_'s avatar
shengzhang_ 已提交
106
![运行结果](https://oss.dev33.cn/sa-token/doc/test-is-login.png)
107 108


shengzhang_'s avatar
shengzhang_ 已提交
109
**注意事项**
110

shengzhang_'s avatar
shengzhang_ 已提交
111
更多使用示例请参考官方仓库demo
112 113 114