资讯专栏INFORMATION COLUMN

Spring Security: Webflux 默认配置

luoyibu / 793人阅读

摘要:默认配置所谓默认配置就是对不做任何配置让它的自动配置起作用目的是对的默认行为有一个初步的直观的了解第一步使用的创建项目项目创建完成会自动生成一个应用入口类第二步创建一个控制器启动会在控制台输出中看到一个水机生成的格式的密码最后打开即可显示

默认配置
所谓默认配置, 就是对Spring Security不做任何配置. 让它的自动配置起作用. 目的是对Spring Security 的默认行为有一个初步的直观的了解.
第一步: 使用Intellj IDEASpring Initializr 创建项目

项目创建完成会自动生成一个应用入口类

package com.example.demowebfluxsecurityinmemory;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoWebfluxSecurityInMemoryApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoWebfluxSecurityInMemoryApplication.class, args);
    }
}
第二步: 创建一个控制器
package com.example.demowebfluxsecurityinmemory;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Mono;

import java.security.Principal;
import java.util.Collections;
import java.util.Map;

@RestController
public class UserController {
    @GetMapping("/")
    public Mono> hello(Mono principal) {
        return principal
            .map(Principal::getName)
            .map(this::helloMessage);
    }

    private Map helloMessage(String username) {
        return Collections.singletonMap("message", "Hello " + username + "!");
    }
}

mvn spring-boot:run 启动, 会在控制台输出中看到一个水机生成的UUID格式的密码:

最后, 打开 http://localhost:8080/login 即可显示登录页面, 默认用户名称为 user. 到这里, Spring Security 的默认设置的样子就是这样的, 现实场景中是不可能这么简单的. 因此我们需要对它进行定制

定制 自定义配置(自定义用户账号)

添加一个配置类, 如下:

package com.example.demowebfluxsecurityinmemory;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.core.userdetails.MapReactiveUserDetailsService;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;

@Configuration
public class SecurityConfig {
    @Bean
    public MapReactiveUserDetailsService userDetailsService() {
        UserDetails user = User.withDefaultPasswordEncoder()
            .username("user")
            .password("user")
            .roles("USER")
            .build();
        UserDetails admin = User.withDefaultPasswordEncoder()
            .username("admin")
            .password("admin")
            .roles("ADMIN")
            .build();
        return new MapReactiveUserDetailsService(user, admin);
    }
}

现在重启服务器, 就可以使用自定义的用户名和密码登录了.

ReactiveUserDetailsService 是Webflux Security的一个核心接口, 代表了Spring Security 安全体系中的用户信息, 它只有一个接口方法Mono findByUsername(String username);

作用: 该接口方法的作用是从各种存储中获取用户信息. 通过该接口拿到了用户的信息, 就可以通过判断用户的状态进行认证, 授权等操作.

这个接口的作用就一个: 获取 UserDetails 对象.

package org.springframework.security.core.userdetails;
import reactor.core.publisher.Mono;
public interface ReactiveUserDetailsService {
    Mono findByUsername(String username);
}

MapReactiveUserDetailsService 实现了 UserDetailsService 接口, 其 findByUsername 方法是从一个 Map 中去获取 UserDetails 对象. 因此能够管理多个 UserDetails 对象.

其实现代码为:

@Override
public Mono findByUsername(String username) {
    String key = getKey(username);
    UserDetails result = users.get(key);
    return result == null ? Mono.empty() : Mono.just(User.withUserDetails(result).build());
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/11374.html

相关文章

  • Spring Boot 参考指南(安全)

    摘要:用于发布身份验证事件的。导入用于安全,配置身份验证,这在非应用程序中也是相关的。安全出于安全考虑,除和之外的所有默认禁用,属性可用于启用。有关保护的其他信息可以在参考指南中找到。 28. 安全 如果在类路径上有Spring Security,那么web应用程序默认是安全的,Spring Boot依赖Spring Security的内容协商策略来决定是使用httpBasic还是formL...

    XanaHopper 评论0 收藏0
  • Spring Boot 参考指南(端点)

    摘要:在发出经过身份验证的请求时,被认为是端点的输入,因此不会缓存响应。自定义端点对或的操作通过使用或通过自动公开。端点范围请求范围请求可以用于请求资源的一部分,当使用或时,操作将返回一个自动支持范围请求的。 50. 端点 Actuator端点让你监视和与应用程序交互,Spring Boot包含许多内置的端点,并允许你添加自己的端点。例如,health端点提供基本的应用程序健康信息。 可以启...

    mozillazg 评论0 收藏0
  • Spring Boot Admin 2.1.0 全攻略

    摘要:并向注册中心注册,注册地址为,最后将的所有端口暴露出来,配置如下在工程的启动类加上注解,开启的功能,加上注解开启的功能。在启动类加上注解,开启的功能。 转载请标明出处: https://www.fangzhipeng.com本文出自方志朋的博客 Spring Boot Admin简介 Spring Boot Admin是一个开源社区项目,用于管理和监控SpringBoot应用程序。 ...

    TalkingData 评论0 收藏0
  • Spring MVC+Stomp+Security+H2 Jetty

    摘要:在逐步开发过程中,发现自己需求,用户使用,页面样式,做得都不是很好。希望很和牛逼的人合作,一齐完善这个项目,能让它变成可以使用的产品。自己也可以在此不断学习,不断累计新的知识,慢慢变强起来。 showImg(https://segmentfault.com/img/bVboKz5);#### 这一个什么项目 ##### 使用技术 Spring MVC Spring Security ...

    gitmilk 评论0 收藏0
  • 《 Kotlin + Spring Boot : 下一代 Java 服务端开发 》

    摘要:下一代服务端开发下一代服务端开发第部门快速开始第章快速开始环境准备,,快速上手实现一个第章企业级服务开发从到语言的缺点发展历程的缺点为什么是产生的背景解决了哪些问题为什么是的发展历程容器的配置地狱是什么从到下一代企业级服务开发在移动开发领域 《 Kotlin + Spring Boot : 下一代 Java 服务端开发 》 Kotlin + Spring Boot : 下一代 Java...

    springDevBird 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<