商城系统开发从0到1(集成SpringSecurity,实现自己的权限控制)

SpringSecurity的配置和实现是比较复杂的,本文在经过一系列的优化和改造后,实现了比较灵活的安全权限控制。

下面直接上代码讲解。

pom引入

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>

        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>${jjwt.version}</version>
        </dependency>

项目中的application.xml

jwt:
  tokenHeader: token #JWT存储的请求头
  secret: mall #JWT加解密使用的密钥
  expiration: 604800 #JWT的超期限时间(60*60*24*7)


secure:
  ignored:
    urls: #安全路径白名单(不验证token)
      - /swagger-ui.html
      - /swagger-resources/**
      - /swagger/**
      - /**/v2/api-docs
      - /img/**
      - /**/*.js
      - /**/*.css
      - /**/*.png
      - /**/*.ico
      - /**/*.json
      - /webjars/springfox-swagger-ui/**
      - /actuator/**
      - /druid/**
      - /api/member/login
    noTokenUrls: #允许无token访问的地址(有token进行验证,无token放行)
      - /api/home/**

核心config

/**
 * 对SpringSecurity的配置的扩展,支持自定义白名单资源路径和查询用户逻辑
 *
 */
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity httpSecurity) throws Exception {
        ExpressionUrlAuthorizationConfigurer<HttpSecurity>.ExpressionInterceptUrlRegistry registry = httpSecurity
                .authorizeRequests();

        //不需要保护的资源路径允许访问
        for (String url : ignoreUrlsConfig().getUrls()) {
            registry.antMatchers(url).permitAll();
        }
        //不需要token的资源路径允许访问
        ignoreUrlsConfig().getNoTokenUrls().forEach(url -> {
            registry.antMatchers(url).permitAll();
        });
        //允许跨域请求的OPTIONS请求
        registry.antMatchers(HttpMethod.OPTIONS)
                .permitAll();
        // 任何请求需要身份认证
        registry.and()
                .authorizeRequests()
                .anyRequest()
                .authenticated()
                // 关闭跨站请求防护及不使用session
                .and()
                .csrf()
                .disable()
                .sessionManagement()
                .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                // 自定义权限拒绝处理类
                .and()
                .exceptionHandling()
                .accessDeniedHandler(restfulAccessDeniedHandler())
                .authenticationEntryPoint(restAuthenticationEntryPoint())
                // 自定义权限拦截器JWT过滤器
                .and()
                .addFilterBefore(jwtAuthenticationTokenFilter(), UsernamePasswordAuthenticationFilter.class);
    }

    @Bean
    public JwtTokenUtil jwtTokenUtil() {
        return new JwtTokenUtil();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService())
                .passwordEncoder(passwordEncoder());
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

    @Bean
    public JwtAuthenticationTokenFilter jwtAuthenticationTokenFilter() {
        return new JwtAuthenticationTokenFilter();
    }

    @Bean
    @Override
    public AuthenticationManager authenticationManagerBean() throws Exception {
        return super.authenticationManagerBean();
 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
mallcloud商城基于SpringBoot2.x、SpringCloud和SpringCloudAlibaba并采用前后端分离vue的企业级微服务敏捷开发系统架构。并引入组件化的思想实现高内聚低耦合,项目代码简洁注释丰富上手容易,适合学习和企业中使用。真正实现了基于RBAC、jwt和oauth2的无状态统一权限认证的解决方案,面向互联网设计同时适合B端和C端用户,支持CI/CD多环境部署,并提供应用管理方便第三方系统接入;同时还集合各种微服务治理功能和监控功能。模块包括:企业级的认证系统开发平台、应用监控、慢sql监控、统一日志、单点登录、Redis分布式高速缓存、配置中心、分布式任务调度、接口文档、代码生成等等。 mallcloud商城特点: 1、前后端分离的企业级微服务架构 2、基于Spring Boot 2.0.X、Spring Cloud Finchley和Spring Cloud Alibaba 3、深度定制Spring Security真正实现了基于RBAC、jwt和oauth2的无状态统一权限认证的解决方案 4、提供应用管理,方便第三方系统接入 5、引入组件化的思想实现高内聚低耦合,项目代码简洁注释丰富上手容易 6、注重代码规范,严格控制包依赖,每个工程基本都是最小依赖 7、非常适合学习和企业中使用 mallcloud商城功能: 1、统一认证功能 支持oauth2的四种模式登录 支持用户名、密码加图形验证码登录 支持手机号加密码登录 支持openId登录 支持第三方系统单点登录 2、分布式系统基础支撑 服务注册发现、路由与负载均衡 服务降级与熔断 服务限流(url/方法级别) 统一配置中心 统一日志中心 统一分布式缓存操作类、cacheManager配置扩展 分布式锁 分布式任务调度器 支持CI/CD持续集成(包括前端和后端) 分布式高性能Id生成器 分布式事务 3、系统监控功能 服务调用链监控 应用拓扑图 慢服务检测 服务Metric监控 应用监控(应用健康、JVM、内存、线程) 错误日志查询 慢查询SQL监控 应用吞吐量监控(qps、rt) 服务降级、熔断监控 服务限流监控 分库分表、读写分离 4、业务基础功能支撑 高性能方法级幂等性支持 RBAC权限管理,实现细粒度控制(方法、url级别) 快速实现导入、导出功能 数据库访问层自动实现crud操作 代码生成器 基于Hutool的各种便利开发工具 网关聚合所有服务的Swagger接口文档 统一跨域处理 统一异常处理 mallcloud商城演示地址 账号密码:admin/admin 应用监控账号密码:admin/admin 配置中心账号密码:nacos/nacos APM监控账号密码:admin/admin Grafana账号:mall/mall txlcn事务管理器密码:admin 任务管理账号密码:admin/123456

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值