OAuth2扩展access_token(二)

2023-11-10

接着上一篇继续展示其他功能~

2.1: 如何拿着生成的access_token获取用户详情信息

在这里插入图片描述

有的小伙伴可能好奇这个jti是合适呢么东西,这个是jwt生成令牌的唯一标识,后期我们还要拿它来整合redis哦,因为他是唯一的,我们可以把它作为key~~~ 滑稽

这个是我们上一篇文章获取到了access_token,那么我现在想拿着当前的这个access_token去获取到我们登录用户的信息怎么办呢? 这个时候我们就要去调用OAuth2提供的另一个接口了,这个接口地址是: /oauth/check_token,页面展示如下:

别忘了是POST请求!!!
在这里插入图片描述

配置客户端id和密钥生成Basic的64编码

在这里插入图片描述
配置完请求头,可以看到由客户端id + 客户端密钥生成的base64编码

在这里插入图片描述

2.2:展示效果:

在这里插入图片描述

2.3: 如何在access_token中自定义一些参数返回

创建扩展器 TokenEnhancer,改扩展器可以让我们的请求信息中加入一些自定义信息,例如我现在在我的请求返回格式中加入一个userInfo的对象,返回的格式为:

{
	"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MzkxNjU0OTMsInVzZXJfbmFtZSI6ImFkbWluIiwiYXV0aG9yaXRpZXMiOlsiYXJ0aWNsZTpzZWFyY2giLCJ1c2VyOnBhc3N3b3JkIiwicm9sZSIsImFydGljbGU6YXVkaXQiLCJjYXRlZ29yeTpkZXRlbGUiLCJibG9nIiwiYWR2ZXJ0OmFkZCIsInJvbGU6YWRkIiwibGFiZWw6ZWRpdCIsInB1YmxpYyIsInVzZXI6c2VhcmNoIiwicm9sZTpkZWxldGUiLCJtZW51OmRlbGV0ZSIsImFkdmVydDpzZWFyY2giLCJhcnRpY2xlOnZpZXciLCJsYWJlbDphZGQiLCJyb2xlOnBlcm1pc3Npb24iLCJhZHZlcnQ6ZWRpdCIsInVzZXI6YWRkIiwidXNlcjpkZWxldGUiLCJjYXRlZ29yeTpzZWFyY2giLCJjYXRlZ29yeTplZGl0Iiwicm9sZTpzZWFyY2giLCJhZHZlciIsImluZGV4IiwibWVudTplZGl0IiwibGFiZWwiLCJtZW51IiwibWVudTpzZWFyY2giLCJhcnRpY2xlIiwiYWR2ZXJ0OmRlbGV0ZSIsIm1lbnU6YWRkIiwic3lzdGVtIiwibGFiZWw6ZGVsZXRlIiwiYXJ0aWNsZTpkZWxldGUiLCJ1c2VyOmVkaXQiLCJsYWJlbDpzZWFyY2giLCJ1c2VyOnJvbGUiLCJyb2xlOmVkaXQiLCJjYXRlZ29yeSIsInVzZXIiLCJjYXRlZ29yeTphZGQiXSwianRpIjoiOTNjOTBjZDItMmFhZC00M2Q5LTkwOTktZDNhYzhlZTZhN2MwIiwiY2xpZW50X2lkIjoibXhnLWJsb2ctYWRtaW4iLCJzY29wZSI6WyJhbGwiXX0.N8lNRdWYG2SJKEAXRW-BCDGUEI1ibi87pWOud7ZGSHDWNR-NBGSDuwL1_K2w-BBxlagLatTu2oTvHivKnA5kxoiTCPPZo9R7E9pEULHjJbttJ0PCGeOht6k-nOyQOKMDE9qjg56D9mnsc60cvp02E06ey9l_lBD50A2rOGUG9tthdvPY-OGJg96gdx4Em4h9aofP_MldVQJ3M-upvs4HNWaUo_MFWz5WH4FdABUldxN83CjG8vgct6eoIUxKZi10wadCyxBLYSD5-4HFYBvNBMNLZNnWZk7XCwYkL-R930Xxs4oZUUd76DDZpRutK_SUjTfGZq0QlJxhYE_50bcSRA",
	"token_type": "bearer",
	"refresh_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX25hbWUiOiJhZG1pbiIsInNjb3BlIjpbImFsbCJdLCJhdGkiOiI5M2M5MGNkMi0yYWFkLTQzZDktOTA5OS1kM2FjOGVlNmE3YzAiLCJleHAiOjE2NDE3MTQyOTMsImF1dGhvcml0aWVzIjpbImFydGljbGU6c2VhcmNoIiwidXNlcjpwYXNzd29yZCIsInJvbGUiLCJhcnRpY2xlOmF1ZGl0IiwiY2F0ZWdvcnk6ZGV0ZWxlIiwiYmxvZyIsImFkdmVydDphZGQiLCJyb2xlOmFkZCIsImxhYmVsOmVkaXQiLCJwdWJsaWMiLCJ1c2VyOnNlYXJjaCIsInJvbGU6ZGVsZXRlIiwibWVudTpkZWxldGUiLCJhZHZlcnQ6c2VhcmNoIiwiYXJ0aWNsZTp2aWV3IiwibGFiZWw6YWRkIiwicm9sZTpwZXJtaXNzaW9uIiwiYWR2ZXJ0OmVkaXQiLCJ1c2VyOmFkZCIsInVzZXI6ZGVsZXRlIiwiY2F0ZWdvcnk6c2VhcmNoIiwiY2F0ZWdvcnk6ZWRpdCIsInJvbGU6c2VhcmNoIiwiYWR2ZXIiLCJpbmRleCIsIm1lbnU6ZWRpdCIsImxhYmVsIiwibWVudSIsIm1lbnU6c2VhcmNoIiwiYXJ0aWNsZSIsImFkdmVydDpkZWxldGUiLCJtZW51OmFkZCIsInN5c3RlbSIsImxhYmVsOmRlbGV0ZSIsImFydGljbGU6ZGVsZXRlIiwidXNlcjplZGl0IiwibGFiZWw6c2VhcmNoIiwidXNlcjpyb2xlIiwicm9sZTplZGl0IiwiY2F0ZWdvcnkiLCJ1c2VyIiwiY2F0ZWdvcnk6YWRkIl0sImp0aSI6ImM4N2RjOGRiLTRiZjAtNDVhMC1iNTRjLTdmZGNjMmQyZGYwMSIsImNsaWVudF9pZCI6Im14Zy1ibG9nLWFkbWluIn0.E8HS_ZjYc-5nSWvPkhDKQxHhJfcxLMFjLMpovZoRuM-GQ_9Nogs1AOCcM1bv_L4UjQx_Pv_JN_FA_OoIIW-bYtvCU3iqciQqpff_tyD2vu1zLbrP6cQDnaHhWC12zKjhi5jjPb01gxYvI9qomm_Zvh6VJvGPVxGP7oRWr3hEu0W7tmkNckDO_drs7632qMIXZbIVEys-knyak8fzZZLpp8RsVxi8M1CUq7cTDal48LkruwageQfZKDOoA1aZbgeNPI_bVbRY5B3zqBFNEnHQn1bloQUEarE7P2coETbD-A67XI2KJf0piTuJ39vuJvRKBAwmoum6YGH_qxCI0tG5Tw",
	"expires_in": 43199,
	"scope": "all",
	"jti": "93c90cd2-2aad-43d9-9099-d3ac8ee6a7c0",
	"userInfo":{
			"。。。具体的用户信息或其他数据,这个userInfo为扩展的数据"
		}
}

具体代码实现如下:

package com.qycq.oauth.security.config;

import com.alibaba.fastjson.JSON;
import com.qycq.oauth.pojo.JwtUser;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.oauth2.common.DefaultOAuth2AccessToken;
import org.springframework.security.oauth2.common.OAuth2AccessToken;
import org.springframework.security.oauth2.provider.OAuth2Authentication;
import org.springframework.security.oauth2.provider.token.TokenEnhancer;

import java.util.LinkedHashMap;
import java.util.Map;

/**
 * <p>
 * 自定义扩展器,当认证成功后,如果客户端需要其他用户信息,则可以进行扩展
 * </p>
 *
 * @author 七月初七
 * @version 1.0
 * @date 2021/12/10  17:18
 */
@Configuration
public class JwtTokenEnhancer implements TokenEnhancer {

    /**
     * 对当前客户端提供自定义的用户数据返回,用于去做OAuth2身份认证
     * 
     * OAuth2AccessToken: 它的实现类只有一个叫做 {@link DefaultOAuth2AccessToken} 中的 setAdditionalInformation()方法
     * 他的方法主要是以下作用:
     *  令牌授予者想要添加到令牌的附加信息,例如支持新的令牌类型。如果映射中的值是原始值
     *  则远程通信将始终有效。使用地图(如果需要,嵌套)或由 Jackson 明确序列化的东西也应该是安全的。
     *
     * @param accessToken    oauth2的token
     * @param authentication authentication.getPrincipal()获取当前登录的用户信息
     * @return
     */
    @Override
    public OAuth2AccessToken enhance(OAuth2AccessToken accessToken, OAuth2Authentication authentication) {
        /**
         * 此处直接强转即可。因为我们知道当前的这个登录用户就是我们自定义的用户对象
         */
        JwtUser jwtUser = (JwtUser) authentication.getPrincipal();
        Map<String, Object> map = new LinkedHashMap<>();
        map.put("userInfo", JSON.toJSON(jwtUser));
        /**
         * 这样我们的accessToken就可以进行扩展信息了。然后将其配置到授权服务器中。{@link com.qycq.oauth.security.AuthorizationServerConfig}
         */
        ((DefaultOAuth2AccessToken) accessToken).setAdditionalInformation(map);
        return accessToken;
    }
}

然后将其配置在授权服务器中


package com.qycq.oauth.security;

import com.qycq.oauth.security.config.ClientDetailsServiceConfig;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.oauth2.config.annotation.configurers.ClientDetailsServiceConfigurer;
import org.springframework.security.oauth2.config.annotation.web.configuration.AuthorizationServerConfigurerAdapter;
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableAuthorizationServer;
import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerEndpointsConfigurer;
import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerSecurityConfigurer;
import org.springframework.security.oauth2.provider.ClientDetailsService;
import org.springframework.security.oauth2.provider.token.TokenEnhancer;
import org.springframework.security.oauth2.provider.token.TokenEnhancerChain;
import org.springframework.security.oauth2.provider.token.TokenStore;
import org.springframework.security.oauth2.provider.token.store.JwtAccessTokenConverter;

import java.util.ArrayList;
import java.util.List;

/**
 * @author 七月初七
 * @version 1.0
 * @date 2021/12/10  14:25
 */
@EnableAuthorizationServer
@Configuration
@Slf4j
@ApiModel(value = "授权服务器")
public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {


    /**
     * 指定Bean的名称,因为这个clientDetailsService有一个地方已经用过了,不然就会报错
     * 出现Bean名称重复导致项目起不来....
     */
    @Autowired
    @Qualifier("jdbcClientDetailsService")
    private ClientDetailsService clientDetailsService;

    /**
     * 将{@link SpringSecurityConfig 中的 AuthenticationManager 注入}
     */
    @Autowired
    private AuthenticationManager authenticationManager;

    /**
     * 将我们自定义的登录逻辑注入进来,具体实现在 {@link com.qycq.oauth.service.impl.UserDetailsServiceImpl }
     */
    @Autowired
    private UserDetailsService userDetailsService;

    /**
     * JWT 方式存储令牌  具体配置在: {@link com.qycq.oauth.security.config.JwtTokenStoreConfig}
     */
    @Autowired
    private TokenStore tokenStore;

    /**
     * JWT 令牌转换器  具体配置在: {@link com.qycq.oauth.security.config.JwtTokenStoreConfig}
     */
    @Autowired
    private JwtAccessTokenConverter jwtAccessTokenConverter;

    /**
     * 注入自定义扩展器
     */
    @Autowired
    private TokenEnhancer jwtTokenEnhancer;


    /**
     * 客户端详细信息服务配置
     *
     * <p>
     * 可以选择在数据库中加载客户端信息,也可以使用内存的方式加载。
     * 具体详见 {@link ClientDetailsServiceConfig}
     * </p>
     *
     * @param clients 客户端信息
     * @throws Exception
     */
    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        clients.withClientDetails(clientDetailsService);
    }

    /**
     * 授权访问端点
     * <p>
     * 该配置为OAuth2生成令牌的关键方法,此方法配置东西过多。
     * </p>
     * 1:我们需要去{@link SpringSecurityConfig} 中去配置 AuthenticationManager的Bean实例,
     * 在SpringSecurity中必须覆盖此方法并加上@Bean注解,否则使用密码方式登录会有问题
     *
     * </br>
     * <p>
     * 2: 需要注入我们的UserDetailsService,让端点走我们自定义的登录逻辑
     *
     * </br>
     * <p>
     * 3: 配置哪种方式管理令牌,这边采用JWT方式存储令牌,将 TokenStore 和 JwtAccessTokenConverter 注入
     * <p>
     * 4: 具体配置参考 {@link com.qycq.oauth.security.config.JwtTokenStoreConfig}
     * </p>
     * <p>
     * 5: 配置到此,即可访问生成accessToken了  访问:  http: // 你的地址: 端口号: xxxx /oauth/token
     * 这个接口地址是OAuth2自带的,你只需要去访问此接口将客户端id 和 密码 放入到请求头Basic认证的, 然后将用户名 密码 和grant_type 设置成password
     * 然后使用POST 方式访问即可看到生成的accessToken令牌
     * 具体参考 {@link org.springframework.security.oauth2.config.annotation.web.configuration.AuthorizationServerSecurityConfiguration}
     *
     * @param endpoints
     * @throws Exception
     */
    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
        endpoints.authenticationManager(authenticationManager)
                .userDetailsService(userDetailsService)
                .tokenStore(tokenStore)
                .accessTokenConverter(jwtAccessTokenConverter);

        log.info("--------------------扩展器start----------------");

        /**
         * 实现存储之前增强访问令牌的策略
         */
        TokenEnhancerChain tokenEnhancerChain = new TokenEnhancerChain();
        List<TokenEnhancer> list = new ArrayList<>();
        list.add(jwtTokenEnhancer);
        list.add(jwtAccessTokenConverter);
        tokenEnhancerChain.setTokenEnhancers(list);
        /**
         * 构造参数需要TokenEnhancer 它的实现类为 {@link TokenEnhancerChain}
         */
        endpoints.tokenEnhancer(tokenEnhancerChain)
                .accessTokenConverter(jwtAccessTokenConverter);


        log.info("--------------------扩展器end----------------");
    }


    /**
     * 授权服务器安全配置器
     *
     * <p>
     * 放行那些端点配置, 例如我想要将生成的accessToken转换成用户信息,那么则需要将其开放,
     * 默认为denyAll()
     * <p>
     * 具体参考 {@link AuthorizationServerSecurityConfigurer} 的 private String checkTokenAccess = "denyAll()";
     * </P>
     * <p>
     * 此处访问的接口为: http: // 你的地址: 端口号: xxxx /oauth/check_token
     * 具体参考 {@link org.springframework.security.oauth2.config.annotation.web.configuration.AuthorizationServerSecurityConfiguration}
     *
     * @param security
     * @throws Exception
     */
    @Override
    public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {
        security.checkTokenAccess("permitAll()");
    }
}

然后重启项目取测试可以看到如下效果: (还是/oauth/token)

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OAuth2扩展access_token(二) 的相关文章

  • Spring Boot and OAuth2翻译

    Spring Boot and OAuth2 本指南将向您展示如何使用OAuth2和Spring Boot构建一个使用 社交登录 功能做各种事情的应用程序示例 它从一个简单的单一提供者单点登录开始 xff0c 并运行一个带有身份验证提供程序
  • 21天,胖哥亲自带你玩转OAuth2

    参与Spring Security与OAuth2专栏限定免费学习群 xff0c 请从阅读原文扫描第三个专栏学习群二维码入群 xff01 关于21天学习挑战赛活动细节 xff0c 请点击 阅读原文了解 作者介绍 码农小胖哥 xff0c Spr
  • OAuth2.0接百度平台进行授权

    百度开发文档 xff1a https openauth baidu com doc regdevelopers html 1 注册开发者账号并创建一个应用 2 创建应用后 xff0c 获取API Key和Secret Key 3 创建一个S
  • SpringCloud + Oauth2.0 + ShiroRedis + JWT + Gateway + Nacos + Nginx + ant-design-vue 电商 java 项目

    该项目是一套电商系统 xff0c 包括前台商城系统及后台管理系统 xff0c 基于SpringBoot 43 MyBatis实现 xff0c 采用Docker容器化部署 前台商城系统 xff1a 首页 商品推荐 商品搜索 商品展示 购物车
  • .net core基于Oauth2+jwt两种方式实现身份认证(附单点登录)

    引用地址 xff1a net core基于Oauth2 43 jwt两种方式实现身份认证 附单点登录 cslx5zx5的博客 CSDN博客 net core oauth2 基于 net core 3 1微服务架构的SSO单点登录实战 本文所
  • oauth2 clientid作用_Oauth 2.0 授权机制

    在了解 Oauth 2 0 之前 xff0c 我们先看一下令牌和密码到底有什么关系 xff0c 其实令牌 xff08 token xff09 与密码 xff08 password xff09 的作用是一样的 xff0c 都可以进入系统 xf
  • Spring Security oauth2(二)使用get方式请求oauth2默认的认证接口/oauth/token

    在我们上篇文章中 xff0c 我们作为快速入门 pring Security oauth2 xff08 一 xff09 快速入门 xff0c 搭建授权服务器 讲了4中授权模式 xff0c 接下来的篇章中 xff0c 我们将会逐步的去一个一个
  • 使用 OAuth2-Server-php 在 Yii 框架上搭建 OAuth2 Server

    http www cnblogs com rereadyou p 3448381 html Yii 有很多 extension 可以使用 xff0c 在查看了 Yii 官网上提供的与 OAuth 相关的扩展后 xff0c 发现了几个 OAu
  • Spring Boot and OAuth2翻译

    Spring Boot and OAuth2 本指南将向您展示如何使用OAuth2和Spring Boot构建一个使用 社交登录 功能做各种事情的应用程序示例 它从一个简单的单一提供者单点登录开始 xff0c 并运行一个带有身份验证提供程序
  • 基于Apache OLTU的OAuth2.0授权解决方案

    Apache OLTU实现了OAuth 2 0的规范 xff0c 是一种可靠的Java授权解决方案 但是 xff0c 官方文档实在是太惨不忍睹了 本文参考了开涛的 OAuth 2 0集成Shiro文章 模拟了OAuth2 0的认证流程 技术
  • Win10部署Authelia(OAuth2授权框架)

    一 安装docker 二 下载authelia代码 span class token comment 下载代码并切换到本地运行例子 span span class token function git span clone https gi
  • Spring Security OAuth2.0认证授权一:框架搭建和认证测试

    一 OAuth2 0介绍 OAuth xff08 开放授权 xff09 是一个开放标准 xff0c 允许用户授权第三方应用访问他们存储在另外的服务提供者上的信息 xff0c 而不 需要将用户名和密码提供给第三方应用或分享他们数据的所有内容
  • Spring Security OAuth2.0认证授权知识概括

    Spring Security OAuth2 0认证授权知识概括 安全框架基本概念基于Session的认证方式Spring Security简介SpringSecurity详解分布式系统认证方案OAuth2 0Spring Cloud Se
  • OAuth2(三)

    首先把项目在本地运行起来 注意redis的配置 在地址栏输入 自动跳断点 界面截图
  • OAuth2简介生成accessToken(一)

    1 OAuth3需要引入的依赖 版本号根据实际情况添加哦
  • springboot+oauth2

    SPRING BOOT OAUTH2 0 jdbc o o 搞了几天springboot的security 下的 oauth2 0 之前没接触过springboot 和security spring boot OAUTH2 0 官方文档也解
  • spring security oauth2源码解析

    spring security oauth2源码解析 EnableResourceServer 启用资源服务配置 注入配置 ResourceServerConfiguration ResourceServerConfiguration 资源
  • Oauth2.0实现token刷新功能

    扣扣技术分享交流群 1125844267 1 Oauth3 0简介 Oauth2 0是一个授权协议 提供了一种解决用户资源共享问题的思路 它不是一种实现 对于java来说 我们可以利用Spring Security OAuth2来实现 Oa
  • 自定义实现OAuth2.0 授权码模式

    文章目录 OAuth2 0 授权码模式 实践 依赖知识 术语 授权码流程 认证服务器 拉起请求用户授权页面 用户手动授权 提交授权 生成code 下发Token 第三方应用 收到code并请求Token 访问受保护的资源 项目结构 Tomc
  • oauth2.0--基础--6.1--SSO的实现原理

    oauth3 0 基础 6 1 SSO的实现原理 1 什么是SSO 1 1 概念 在一个 多系统共存 的环境下 用户在一处登录后 就不用在其他系统中登录 就可以访问其他系统的资源 用户环境 浏览器 只能同一个浏览器 不会出现A浏览器登录成功

随机推荐

  • 负载均衡策略

    Ribbon内置了多种负载均衡策略 轮询策略 com netflix loadbalancer RoundRobinRule 随机策略 com netflix loadbalancer RandomRule 重试策略 com netflix
  • 2021年蓝桥杯省赛 C++ B组

    目录 1550 蓝桥杯2021初赛 卡片 1551 蓝桥杯2021初赛 直线 1552 蓝桥杯2021初赛 货物摆放 1553 蓝桥杯2021初赛 路径 1555 蓝桥杯2021初赛 空间 1563 蓝桥杯2021初赛 时间显示 1550
  • 内存函数详解

    目录 内存函数 1 memmcpy 2 memmove 3 memcmp 4 memset 内存函数 什么是内存操作函数 我们认识字符串操作函数 strlen strcopy等 字符操作函数 tolower等 这些函数的操作对象都需要符合一
  • mysql大致组成

    文章目录 前言 mysql大致架构 各个组件的作用 连接器 查询缓存 分析器 优化器 执行器 总结 前言 这篇文章大致介绍下mysql的组成 和各个组成部分的基本作用 并不会做深入的讲解 只是基础的介绍 以便大家对mysql组成有个大致了解
  • 【git】git push 压缩包 或者 rpm包 安装包 无法解压 gzip: stdin: not in gzip format

    1 概述 因为一个环境需要在升级的时候检测nginx是否安装 如果没有安装的话 需要进行安装 然后我就将压缩包大道代码中 然后上传到服务器的时候 发现无法解压 我在一个环境验证好的nginx包如下 root node4 nginx stab
  • 泰勒公式求极限(如何用+精度怎么确定)一文扫除泰勒公式难点

    有些复杂的极限题 里面会涵盖着各种各样的函数 这些群魔乱舞的函数加大了我们计算极限的难度 此时想 如果可以将这些函数统一成一样的形式该多好 此时 就有我们的泰勒公式了 1 泰勒公式怎么用 指数函数 三角函数 反三角函数 对数函数等函数 同时
  • 正序分解整数,把一串数字倒过来逐字输出

    问题 正序分解整数 文章目录 问题 正序分解整数 1 解决 2 初步想法 2 1 结果 2 2 问题 3 更改 3 1顺便提一嘴 3 1 2 C 库函数 pow 3 1 3描述 3 1 4声明
  • 【机器学习】DBSCAN密度聚类算法(理论 + 图解)

    文章目录 一 前言 二 DBSCAN聚类算法 三 DBSCAN算法步骤 四 算法的理解 五 常用评估方法 轮廓系数 一 前言 之前学聚类算法的时候 有层次聚类 系统聚类 K means聚类 K中心聚类 最后呢 被DBSCAN聚类算法迷上了
  • Android Studio中Intel HAXM的那些坑

    最近用过两台电脑折腾Android Studio 都是windows的系统 不知道为什么连着踩了两个坑 第一台我结束了qemu system i386 exe这个倒霉的进程 导致我开启模拟器的时候一直提示我没有安装Intel HAXM 没办
  • mySQL常用DDL命令

    mysql常用DDL命令 1 创建数据库 2 查看数据库 3 查看数据库创建明细 4 修改数据库编码 5 删除数据库 6 使用数据库 7 创建表 8 查看表的结构 9 在表中插入列 字段 10 修改列 字段 的属性 11 删除某列 字段 1
  • 首字母变大写

    小写字母变大写m 0 m 0 32 include
  • 【周末闲谈】剑指offer,了解面试,学会面试

    我们在找工作时 需要结合自己的现状 针对意向企业做好充分准备 作为程序员 你有哪些面试IT技术岗的技巧 你可以从一下几个方向谈谈你的想法和观点 个人主页 个人主页 系列专栏 周末闲谈 文章目录 前言 剑指Offer 面试指南 一 了解你的面
  • Java学习笔记(十八)

    Spring Boot 什么是 Spring Boot Spring Boot 已经建立在现有 spring 框架之上 使用 spring 启动 避免了之前我们必须做的所有样板代码和配置 因此 SpringBoot 可以帮助我们以最少的工作
  • vue项目中实现扫码登录

    1 需求描述 PC端实现两种登录方式 账号登录 扫码登录 扫码登录未绑定账号 弹框提示绑定账号 账号登录 未绑定微信 弹框提示 效果图 2 扫码登录未绑定账号 弹框提示绑定账号 2 1 安装 qrcode npm install qrcod
  • TFS淘宝分布式文件核心存储引擎源码架构剖析实现

    这里写目录标题 相关背景介绍 相关设计思路介绍 项目基础 文件系统接口 扇区 文件结构 关于inode 为什么淘宝不用小文件存储 淘宝网为什么不用普通文件存储海量小数据 设计思路 关键数据结构哈希表 代码日志 mmp file h mmap
  • 31_access 日志

    文章目录 过滤模块的位置 返回响应 加工响应内容 过滤模块的位置 接收 http 头部 gt pre access 阶段 gt limit req 模块 gt limit conn 模块 gt access 阶段 gt access 模块
  • Java java.lang.NumberFormatException: For input string: ““问题解决

    问题描述 java lang NumberFormatException For input string 问题分析 1 使用Long parseLong Integer parseInt Double parseDouble Float
  • BP神经网络理解原理——用Python编程实现识别手写数字(翻译英文文献)

    BP神经网络理解原理 用Python编程实现识别手写数字 备注 这里可以用这个方法在csdn中编辑公式 https www zybuluo com codeep note 163962 一 前言 本文主要根据一片英文书籍进行学习 并且尝试着
  • CCProxy网络共享代理服务端配置使用

    CCProxy是一个局域网络共享工具 可用于VPN共享等 1 解压安装CCProxy工具 双击CCProxy exe启动 打开如下界面 2 打开设置界面 设置对外共享的IP地址和端口号 如下 点击确定 最后再点击启动即可
  • OAuth2扩展access_token(二)

    接着上一篇继续展示其他功能 2 1 如何拿着生成的access token获取用户详情信息 有的小伙伴可能好奇这个jti是合适呢么东西 这个是jwt生成令牌的唯一标识 后期我们还要拿它来整合redis哦 因为他是唯一的 我们可以把它作为ke