zoukankan      html  css  js  c++  java
  • WebFlux Spring Security配置

    最小化可运行配置

    package com.terwergreen.bugucms.config;
    
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Bean;
    import org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity;
    import org.springframework.security.config.web.server.ServerHttpSecurity;
    import org.springframework.security.core.userdetails.MapReactiveUserDetailsService;
    import org.springframework.security.core.userdetails.ReactiveUserDetailsService;
    import org.springframework.security.core.userdetails.User;
    import org.springframework.security.core.userdetails.UserDetails;
    import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
    import org.springframework.security.crypto.password.PasswordEncoder;
    import org.springframework.security.web.server.SecurityWebFilterChain;
    import org.springframework.security.web.server.authentication.logout.RedirectServerLogoutSuccessHandler;
    import org.springframework.security.web.server.authentication.logout.ServerLogoutSuccessHandler;
    
    import java.net.URI;
    
    /**
     * @Author Terwer
     * @Date 2018/6/22 15:55
     * @Version 1.0
     * @Description 安全授权配置
     **/
    @EnableWebFluxSecurity
    public class SecurityConfig {
        private Log logger = LogFactory.getLog(this.getClass());
    
        @Autowired
        PasswordEncoder passwordEncoder;
    
        @Bean
        public PasswordEncoder passwordEncoder() {
            return new BCryptPasswordEncoder();
        }
    
        @Bean
        public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {
            logger.info("WebFlux Security begin");
            return http
                    .authorizeExchange()
                    .pathMatchers("/admin/**")
                    .authenticated()
                    .pathMatchers("/**")
                    .permitAll()
                    .and()
                    .csrf()
                    //.csrfTokenRepository(customCsrfTokenRepository)
                    //.requireCsrfProtectionMatcher(customCsrfMatcher)
                    .and()
                    .formLogin()
                    //.loginPage("/login")
                    //.authenticationFailureHandler(new RedirectServerAuthenticationFailureHandler("/login?error"))
                    //.authenticationSuccessHandler(new RedirectServerAuthenticationSuccessHandler("/admin"))
                    .and()
                    .logout()
                    //.logoutUrl("/logout")
                    .logoutSuccessHandler(logoutSuccessHandler("/login?logout"))
                    .and()
                    .build();
        }
    
        public ServerLogoutSuccessHandler logoutSuccessHandler(String uri) {
            RedirectServerLogoutSuccessHandler successHandler = new RedirectServerLogoutSuccessHandler();
            successHandler.setLogoutSuccessUrl(URI.create(uri));
            return successHandler;
        }
    
        @Bean
        public ReactiveUserDetailsService userDetailsService() {
            //内存中缓存权限数据
            User.UserBuilder userBuilder = User.builder();
            UserDetails admin = userBuilder.username("admin").password(passwordEncoder.encode("123456")).roles("USER", "ADMIN").build();
            // 输出加密密码
            String encodePassword = passwordEncoder.encode("123456");
            logger.info("encodePassword:" + encodePassword);
            return new MapReactiveUserDetailsService(admin);
        }
    }
    
    

    参考

    https://www.sudoinit5.com/post/spring-reactive-auth-forms/

  • 相关阅读:
    Element filtername is not allowed here-web.xml version="3.0"-intellij idea
    探究JavaScript闭包
    telnet的安装和使用
    Oracle数据库常用的sql语句
    centos6上安装jenkins
    idea的maven项目不知道为啥下载不下来jar包,看本地仓库只是下载了一下xml文件,没有jar包问题
    Oracle数据库使用mybatis的时候,实体类日期为Date类型,mybatis里面定义的是Date类型,插入的时候,时分秒全部是12:00:00问题
    maven打包某个分支的包
    maven打包到私服,打的是war包,好郁闷
    多线程初学习
  • 原文地址:https://www.cnblogs.com/tangyouwei/p/10032668.html
Copyright © 2011-2022 走看看