Spring security 如何使用spring安全性保护reactor netServer?
我尝试使用SpringBootWebApplication和嵌入式tomcat开发一个“混合”服务器,并从reactor开发一个netServer来扩展我的RESTAPI。 没有Spring控制器,所有传入的请求都由netServer处理。 尽管如此,我还是希望有一个使用SpringSecurityMemberMe功能的登录页面来验证用户,并使用此验证来保护reactor netServer上的传入请求 根据本教程,我开始实现netServer 这是我的网络服务器:Spring security 如何使用spring安全性保护reactor netServer?,spring-security,netty,spring-boot,reactor,Spring Security,Netty,Spring Boot,Reactor,我尝试使用SpringBootWebApplication和嵌入式tomcat开发一个“混合”服务器,并从reactor开发一个netServer来扩展我的RESTAPI。 没有Spring控制器,所有传入的请求都由netServer处理。 尽管如此,我还是希望有一个使用SpringSecurityMemberMe功能的登录页面来验证用户,并使用此验证来保护reactor netServer上的传入请求 根据本教程,我开始实现netServer 这是我的网络服务器: NetServer<F
NetServer<FullHttpRequest, FullHttpResponse> server = new TcpServerSpec<FullHttpRequest, FullHttpResponse>(NettyTcpServer.class)
.env(env)
.dispatcher("sync")
.listen(8080)
.options(opts)
.consume(ch -> {
// attach an error handler
ch.when(Throwable.class, UserController.errorHandler(ch));
// filter requests by URI
Stream<FullHttpRequest> in = ch.in();
// serve image thumbnail to browser
in.filter((FullHttpRequest req) -> req.getUri().startsWith(UserController.GET_USER_PROFILE))
.consume(UserController.getUserProfile(ch));
})
.get();
该服务由spring管理,因此我想我可以在其上使用spring GlobalMethodSecurity(我仍在开发这一部分,但我不确定这是保护我的netServer的最佳方式)
在reactor netServer上使用Spring安全性有更简单的方法吗???
我的第一个网站版本是用nodeJS开发的,用于处理许多并发用户,我尝试使用jvmnio解决方案对其进行重构。
那么,spring/reactor/netty是一个拥有高度可伸缩性服务器的好解决方案,还是应该使用类似play的东西呢!还是vertx.io
非常感谢您是否尝试过从JavaConfig
@Bean
方法中引导您的NetServer
?比如:
@Configuration
@EnableReactor
class AppConfig {
public Function<NetChannel, UserController> users() {
return new UserControllerFactory();
}
@Bean
public NetServer netServer(Environment env, Function<NetChannel, UserController> users) {
return new TcpServerSpec(NettyTcpServer.class)
.env(env)
.dispatcher("sync")
.listen(8080)
.options(opts)
.consume(ch -> {
// attach an error handler
ch.when(Throwable.class, UserController.errorHandler(ch));
// filter requests by URI
Stream<FullHttpRequest> in = ch.in();
// serve image thumbnail to browser
in.filter((FullHttpRequest req) -> req.getUri().startsWith(UserController.GET_USER_PROFILE))
.consume(users.apply(ch));
})
.get();
}
}
@配置
@使能反应堆
类AppConfig{
公共功能用户(){
返回新的UserControllerFactory();
}
@豆子
公共NetServer NetServer(环境环境、函数用户){
返回新的TcpServerSpec(nettytcserver.class)
.env(环境)
.dispatcher(“同步”)
.听(8080)
.选项(opts)
.消费(ch->{
//附加错误处理程序
ch.when(Throwable.class,UserController.errorHandler(ch));
//按URI筛选请求
流入=流入();
//将图像缩略图提供给浏览器
in.filter((FullHttpRequest req)->req.getUri().startsWith(UserController.GET\u USER\u PROFILE))
.消费(用户.应用(ch));
})
.get();
}
}
这将保留对Spring安全性的支持,并使您能够将处理程序作为bean共享,而不是作为静态方法的返回值共享。一般来说,在Reactor-TCP应用程序中需要做的所有事情都可以使用bean和注入,并将NetServer
作为bean本身重新调用
@Component
public class StaticContextAccessor {
private static StaticContextAccessor instance;
@Autowired
private ApplicationContext applicationContext;
@PostConstruct
public void registerInstance() {
instance = this;
}
public static <T> T getBean(Class<T> clazz) {
return instance.applicationContext.getBean(clazz);
}
}
@Service
@PreAuthorize("true")
public class UserServiceImpl implements UserService{
public String loadUserProfile(LoginDTO login){
//TODO load profile in mongo
return new GsonBuilder().create().toJson(login);
}
}
@Configuration
@EnableReactor
class AppConfig {
public Function<NetChannel, UserController> users() {
return new UserControllerFactory();
}
@Bean
public NetServer netServer(Environment env, Function<NetChannel, UserController> users) {
return new TcpServerSpec(NettyTcpServer.class)
.env(env)
.dispatcher("sync")
.listen(8080)
.options(opts)
.consume(ch -> {
// attach an error handler
ch.when(Throwable.class, UserController.errorHandler(ch));
// filter requests by URI
Stream<FullHttpRequest> in = ch.in();
// serve image thumbnail to browser
in.filter((FullHttpRequest req) -> req.getUri().startsWith(UserController.GET_USER_PROFILE))
.consume(users.apply(ch));
})
.get();
}
}