• SpringSecurity + SpringBoot2.x +redis+多数据源


    1. 多数据源配置(SQLServer,PostgreSQL)

    2. 集群session 配置 外部存储(redis)

    3.SpringSecurity 登录安全认证

    4.SpringSecurity remembreMe  配置

    5. SpringSecurity SessionManager 配置

    6.增加了图片验证码登录

    7.动态权限url 匹配认证

    @Component
    @Order(Integer.MAX_VALUE)
    public class ThirdpartyAuthorizeConfigRole implements ThirdpartyAuthorizeConfigProvider {
    
        @Override
        public void config(ExpressionUrlAuthorizationConfigurer<HttpSecurity>.ExpressionInterceptUrlRegistry config) {
    //        config.antMatchers("/third/user").hasRole("Admin");
            config.anyRequest().access("@rbacService.hasPermission(request,authentication)");
        }
    }
    

      

    package com.sy.thirdparty.authentication;
    
    import com.sy.thirdparty.config.SpringSecurityProperties;
    import com.sy.thirdparty.zcoas.SysUserEntity;
    import com.sy.thirdparty.zcoas.repository.SysUserRepository;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.security.core.Authentication;
    import org.springframework.security.core.userdetails.UserDetails;
    import org.springframework.stereotype.Component;
    import org.springframework.util.AntPathMatcher;
    
    import javax.servlet.http.HttpServletRequest;
    import java.util.HashSet;
    import java.util.Set;
    
    /**
     * @Title: RbacServiceImpl
     * @ProjectName thirdparty
     * @date 2021-01-0711:34
     */
    @Component("rbacService")
    public class RbacServiceImpl implements RbacService {
        private AntPathMatcher antPathMatcher = new AntPathMatcher();
        @Autowired
        private SysUserRepository sysUserRepository;
    
        @Autowired
        private SpringSecurityProperties springSecurityProperties;
        @Override
        public boolean hasPermission(HttpServletRequest request, Authentication authentication) {
            Object principal = authentication.getPrincipal();
            boolean hasPermission = false;
            if (principal instanceof UserDetails) {
                String username = ((UserDetails) principal).getUsername();
                SysUserEntity user = sysUserRepository.findByLoginName(username);
                if (user.getUserId() == springSecurityProperties.getAdminUserId()) return true;
                Set<String> urls = new HashSet<>();
                for (String url : urls) {
                    if (antPathMatcher.match(url, request.getRequestURI())) {
                        hasPermission = true;
                        break;
                    }
                }
            }
            return hasPermission;
        }
    }
    

      

    项目地址: https://github.com/qukaige/thirdDemo

  • 相关阅读:
    linux系统日志及其rsyslog服务
    C++
    程序员之---C语言细节18(一些奇怪表达式)
    Spring MVC的简单使用方法
    Android系统开发(4)——Autotools
    大话设计模式C++版——代理模式
    JS获取地址栏并拼接參数
    二叉树的应用(1)--二叉树排序树基本操作
    【LeetCode-面试算法经典-Java实现】【067-Add Binary(二进制加法)】
    Android 实现形态各异的双向側滑菜单 自己定义控件来袭
  • 原文地址:https://www.cnblogs.com/412013cl/p/14245808.html
Copyright © 2020-2023  润新知