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/

  • 相关阅读:
    Nginx+Lua学习笔记-环境搭建
    Scala学习笔记-Servlet环境搭建
    Scala学习笔记-环境搭建以及简单语法
    Python v3.4 not found的解决方法
    【闲聊】最近一段时间的总结
    javassist初接触
    java调用cmd
    Flexpaper初接触
    Derby初接触
    LVS Keepalived 集群
  • 原文地址:https://www.cnblogs.com/tangyouwei/p/10032668.html
Copyright © 2011-2022 走看看