首页 > 其他分享 >系统开放相应接口给第三方平台

系统开放相应接口给第三方平台

时间:2024-03-11 17:11:07浏览次数:20  
标签:Autowired permitAll 接口 访问 参数 private 开放 第三方 httpSecurity

SpringSecurity放行接口,匿名访问

@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter
{
    /**
     * 自定义用户认证逻辑
     */
    @Autowired
    private UserDetailsService userDetailsService;
    
    /**
     * 认证失败处理类
     */
    @Autowired
    private AuthenticationEntryPointImpl unauthorizedHandler;

    /**
     * 退出处理类
     */
    @Autowired
    private LogoutSuccessHandlerImpl logoutSuccessHandler;

    /**
     * token认证过滤器
     */
    @Autowired
    private JwtAuthenticationTokenFilter authenticationTokenFilter;
    
    /**
     * 跨域过滤器
     */
    @Autowired
    private CorsFilter corsFilter;

    /**
     * 允许匿名访问的地址
     */
    @Autowired
    private PermitAllUrlProperties permitAllUrl;

    /**
     * 解决 无法直接注入 AuthenticationManager
     *
     * @return
     * @throws Exception
     */
    @Bean
    @Override
    public AuthenticationManager authenticationManagerBean() throws Exception
    {
        return super.authenticationManagerBean();
    }

    /**
     * anyRequest          |   匹配所有请求路径
     * access              |   SpringEl表达式结果为true时可以访问
     * anonymous           |   匿名可以访问
     * denyAll             |   用户不能访问
     * fullyAuthenticated  |   用户完全认证可以访问(非remember-me下自动登录)
     * hasAnyAuthority     |   如果有参数,参数表示权限,则其中任何一个权限可以访问
     * hasAnyRole          |   如果有参数,参数表示角色,则其中任何一个角色可以访问
     * hasAuthority        |   如果有参数,参数表示权限,则其权限可以访问
     * hasIpAddress        |   如果有参数,参数表示IP地址,如果用户IP和参数匹配,则可以访问
     * hasRole             |   如果有参数,参数表示角色,则其角色可以访问
     * permitAll           |   用户可以任意访问
     * rememberMe          |   允许通过remember-me登录的用户访问
     * authenticated       |   用户登录后可访问
     */
    @Override
    protected void configure(HttpSecurity httpSecurity) throws Exception
    {
        // 注解标记允许匿名访问的url
        ExpressionUrlAuthorizationConfigurer<HttpSecurity>.ExpressionInterceptUrlRegistry registry = httpSecurity.authorizeRequests();
        permitAllUrl.getUrls().forEach(url -> registry.antMatchers(url).permitAll());

        httpSecurity
                // CSRF禁用,因为不使用session
                .csrf().disable()
                // 认证失败处理类
                .exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and()
                // 基于token,所以不需要session
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
                // 过滤请求
                .authorizeRequests()
                // 对于登录login 注册register 验证码captchaImage 允许匿名访问
                .antMatchers("/login", "/register", "/d/v1/*", "/captchaImage").anonymous()
                // 静态资源,可匿名访问
                .antMatchers("/static/**","/bdcloud/**","/onbdcloud/**").permitAll()
                .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**","/**/*.png","/**/*.jpg","/**/*.icon","/**/*.ttf").permitAll()
                .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()
                // 除上面外的所有请求全部需要鉴权认证
                .anyRequest().authenticated()
                .and()
                .headers().frameOptions().disable();
        // 添加Logout filter
        httpSecurity.logout().logoutUrl("/logout").logoutSuccessHandler(logoutSuccessHandler);
        // 添加JWT filter
        httpSecurity.addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);
        // 添加CORS filter
        httpSecurity.addFilterBefore(corsFilter, JwtAuthenticationTokenFilter.class);
        httpSecurity.addFilterBefore(corsFilter, LogoutFilter.class);
    }

    /**
     * 强散列哈希加密实现
     */
    @Bean
    public BCryptPasswordEncoder bCryptPasswordEncoder()
    {
        return new BCryptPasswordEncoder();
    }

    /**
     * 身份认证接口
     */
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception
    {
        auth.userDetailsService(userDetailsService).passwordEncoder(bCryptPasswordEncoder());
    }
}

 

我方主动将数据推送到kafka等消息队列

 

标签:Autowired,permitAll,接口,访问,参数,private,开放,第三方,httpSecurity
From: https://www.cnblogs.com/ReturnOfTheKing/p/18066582

相关文章

  • 接口测试常见的状态码
    1、200OK:客户端请求成功,表示请求已成功,请求所希望的响应头或数据体将随此响应返回。 2、302(临时重定向):表示请求的资源临时搬到了其他位置请求的资源暂时被配到到了新的URI 3、304(未修改):表示客户端发送附带条件的请求(GET方法请求报文中的IF…)时,条件不满足返回304......
  • 7月13日《罗布乐思》全平台开放,一起探索无限世界
    首页开发者玩家教育 新闻7月13日《罗布乐思》全平台开放,一起探索无限世界罗布乐思2021-07-1222:43:56 7月13日,《罗布乐思》正式全平台开放。登录安卓端及IOS端,即可探索《罗布乐思》的无限世界。 《罗布乐思》是集体验、开发于一体的多人在线3D创意社区,......
  • 教您如何使用API接口获取虾皮商品详情
    要使用API接口获取虾皮(Shopee)的商品详情,您需要遵循以下步骤:注册并获取API权限首先,您需要在Shopee开放平台注册账号,并创建一个应用。在创建应用的过程中,您需要填写相关信息,包括应用名称、应用描述等。提交应用后,Shopee会审核您的应用并决定是否授予API调用权限。获取API凭证......
  • 一文读懂Databend的开放表格式引擎
    Databend近期发布ApacheIceberg和DeltaTable两类表引擎,以提供对两种目前最受欢迎的开放表格式的支持,满足基于不同技术栈的现代数据湖方案面临的高级分析需求。采用基于Databend/DatabendCloud的一站式解决方案,可以在不启用额外的Spark/Databricks服务的......
  • 接口的详解 :接口 对象=new 实现类
    首先接口是一个特殊的抽象类既然是类就会创建对象 接口是为了实现多态接口是为了实现多态。接口是为了实现多态。接口回调:interfacePeople{voidpeopleList();}classStudentimplementsPeople{publicvoidpeopleList(){System.out.println("I’m......
  • 群星璀璨的Python江湖,Python第三方库介绍
    如果Python语言是一个江湖,那么python第三方库就是一个个身怀绝技的江湖侠客,这些侠客在这偌大的江湖尽情挥洒着江湖侠气。有人名扬天下,有人默默无闻,有人纵横捭阖,有人黯然谢幕,每天都在上演人生的悲欢离合。那么什么是python第三方库呢?什么是python第三方库python是一门非常流行......
  • python 新版本flask创建接口方式
    importpymysqlfrompymysql.cursorsimportDictCursorfromflaskimportFlask,requestfromflask.json.providerimportDefaultJSONProviderfromflask_corsimportCORSfromdatetimeimportdatetime,datesqlconnect=pymysql.connect(user="root&q......
  • .NET开源的两款第三方登录整合库
    前言我相信做开发的同学应该都对接过各种各样的第三方平台的登录授权,来获取用户信息(如:微信登录、支付宝登录、QQ登录、GitHub登录等等)。今天大姚分享两款.NET开源的第三方登录整合库。MrHuo.OAuthMrHuo.OAuth是.NET项目集成OAuth2登录最全面的、最方便的框架,集成了国内外大部分......
  • 卸载环境所有python包(第三方库)
    打开CMD终端,查看已安装库:piplist一个个删除需要执行:pipuninstall包名;那么如何一次性删除所有的包呢?首先需要执行以下代码: pipfreeze>modules.txt这时候就能够把所有的第三方模块的模块名称以及第三方模块的版本号等等信息保存在了这个modules.txt文件中,之后的操作就是......
  • elasticsearch常用请求接口Rest API示例
    创建shopping索引PUT/shopping查看全部索引GET/_cat/indices查看指定索引GET/shopping删除指定索引DELETE/shopping索引的映射字段属性,是否关键字和加入索引PUT/shopping/_mapping{"properties":{"title":{"type":"text"},&qu......