2021.4.2 HashMap

这个博客展示了如何在Java中创建并使用HashMap来存储硬币的面值及其名称。程序创建了一个HashMap,将整数(面值)作为键,字符串(硬币名称)作为值,并提供了插入数据和根据输入面值获取硬币名称的方法。

HashMap

实例

package 顺序容器.src.Program.HashMap;

import javax.swing.*;
import java.util.HashMap;
import java.util.Scanner;

public class HMtest {

    private  HashMap<Integer,String> coinget = new HashMap<>();

    public void Coinnn(){
        coinget.put(1,"penny");
        coinget.put(10,"dime");
        coinget.put(25,"quarter");
        coinget.put(50,"half-dollar");

    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int num = scanner.nextInt();
        HMtest hMtest = new HMtest();
        hMtest.Coinnn();
        System.out.println(hMtest.Coin(num));
    }


    public String Coin(int num){
        return coinget.get(num);
    }
}



创建HashMap

private HashMap<前面数据类型,对应的需要输出的数据类型> 名称 = new HashMap<>();

向HashMap里面放入和取出数据

放入数据:

名称.put(前一个数据,后一个数据);

取出数据:

名称.get(前一个数据);

查看现在一共存有多少个数据

名称.keySet().size();

//把所有的key先做成集合后,再求长度

注意

HashMap可以直接输出

for each遍历HashMap

//假如key为int 第二个数据类型为String

for(Integer k : 名称.keySet() ){

​ String s = 名称.get(k);

​ System.out.println(s);

}

需求响应动态冰蓄冷系统与需求响应策略的优化研究(Matlab代码实现)内容概要:本文围绕“需求响应动态冰蓄冷系统与需求响应策略的优化研究”展开,基于Matlab代码实现,重点探讨了冰蓄冷系统在电力需求响应背景下的动态建模与优化调度策略。研究结合实际电力负荷与电价信号,构建系统能耗模型,利用优化算法对冰蓄冷系统的运行策略进行求解,旨在降低用电成本、平衡电网负荷,并提升能源利用效率。文中还提及该研究为博士论文复现,涉及系统建模、优化算法应用与仿真验证等关键技术环节,配套提供了完整的Matlab代码资源。; 适合人群:具备一定电力系统、能源管理或优化算法基础,从事科研或工程应用的研究生、高校教师及企业研发人员,尤其适合开展需求响应、综合能源系统优化等相关课题研究的人员。; 使用场景及目标:①复现博士论文中的冰蓄冷系统需求响应优化模型;②学习Matlab在能源系统建模与优化中的具体实现方法;③掌握需求响应策略的设计思路与仿真验证流程,服务于科研项目、论文写作或实际工程方案设计。; 阅读建议:建议结合提供的Matlab代码逐模块分析,重点关注系统建模逻辑与优化算法的实现细节,按文档目录顺序系统学习,并尝试调整参数进行仿真对比,以深入理解不同需求响应策略的效果差异。
综合能源系统零碳优化调度研究(Matlab代码实现)内容概要:本文围绕“综合能源系统零碳优化调度研究”,提供了基于Matlab代码实现的完整解决方案,重点探讨了在高比例可再生能源接入背景下,如何通过优化调度实现零碳排放目标。文中涉及多种先进优化算法(如改进遗传算法、粒子群优化、ADMM等)在综合能源系统中的应用,涵盖风光场景生成、储能配置、需求响应、微电网协同调度等多个关键技术环节,并结合具体案例(如压缩空气储能、光热电站、P2G技术等)进行建模与仿真分析,展示了从问题建模、算法设计到结果验证的全流程实现过程。; 适合人群:具备一定电力系统、能源系统或优化理论基础,熟悉Matlab/Simulink编程,从事新能源、智能电网、综合能源系统等相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①开展综合能源系统低碳/零碳调度的科研建模与算法开发;②复现高水平期刊(如SCI/EI)论文中的优化模型与仿真结果;③学习如何将智能优化算法(如遗传算法、灰狼优化、ADMM等)应用于实际能源系统调度问题;④掌握Matlab在能源系统仿真与优化中的典型应用方法。; 阅读建议:建议结合文中提供的Matlab代码与网盘资源,边学习理论模型边动手调试程序,重点关注不同优化算法在调度模型中的实现细节与参数设置,同时可扩展应用于自身研究课题中,提升科研效率与模型精度。
<think>嗯,用户想在OAuth2 2.3.6和Spring Security 2021.0.9的环境下,用JWT生成token的代码实现。首先,我需要确认这些版本是否兼容,可能用户的项目使用的是较新的Spring Security版本,所以对应的OAuth2依赖可能需要调整。Spring Security在2021.0.x版本可能对应的是Spring Boot 2.6或更高版本,这时候可能需要使用Spring Security OAuth2的特定配置。 然后,用户提到JWT生成token,这需要配置JwtAccessTokenConverter和JwtTokenStore。可能需要检查相关的依赖,比如spring-security-jwt是否还适用,或者是否已经被Spring Security OAuth2 Server取代。因为在较新的版本中,Spring团队可能已经将OAuth2的支持迁移到Spring Security OAuth2 Authorization Server项目中,所以需要确认依赖是否正确。 接下来,配置AuthorizationServerConfigurerAdapter。这里需要重写configure方法,设置客户端详情、令牌服务以及端点配置。用户可能需要设置客户端ID、密钥、授权类型和作用域。同时,JwtAccessTokenConverter需要设置签名密钥,比如对称密钥HMAC或者非对称密钥对。用户可能需要生成一个合适的签名密钥,并确保资源服务器能够验证这个签名。 另外,引用中提到Redis整合,但用户的问题是关于JWT的,所以可能不需要Redis存储token,除非需要存储额外的用户信息。JWT本身是无状态的,所以令牌信息存储在token中,不需要Redis持久化。不过,用户认证时的用户信息可能需要从数据库加载,这里可能需要UserDetailsService的实现。 还要注意引用的内容中提到的客户端认证方式,比如Basic Auth使用client_id和client_secret,这部分在配置客户端详情时需要正确设置。代码示例中的@Configuration和@EnableAuthorizationServer注解是否正确应用,以及是否在Spring Boot的自动配置下正常工作。 可能还需要考虑令牌的有效期配置,比如accessTokenValiditySeconds,以及如何自定义JWT的claims,比如添加用户角色或其他信息。这部分可以通过自定义TokenEnhancer来实现,增强JWT的内容。 最后,测试生成token的请求是否符合预期,使用curl或Postman发送请求,检查返回的JWT结构是否正确,签名是否有效。同时,确保资源服务器配置了JwtTokenStore和相同的JwtAccessTokenConverter,以便正确解析token。 总结步骤:添加依赖、配置授权服务器、设置JWT转换器、定义客户端详情、实现用户认证,最后测试验证。需要确保所有配置与Spring Security和OAuth2的版本兼容,避免因版本问题导致的配置错误。</think>在Spring Security 2021.0.9(对应Spring Boot 2.6.x)和OAuth2 2.3.6环境下,JWT令牌生成的实现可分为以下步骤: ### 一、核心配置实现 #### 1. 添加依赖 ```xml <!-- Spring Security OAuth2 --> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-oauth2-jose</artifactId> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-oauth2-resource-server</artifactId> </dependency> <!-- JWT支持 --> <dependency> <groupId>com.nimbusds</groupId> <artifactId>nimbus-jose-jwt</artifactId> <version>9.31</version> </dependency> ``` #### 2. 配置授权服务器 ```java @Configuration @EnableAuthorizationServer public class AuthServerConfig extends AuthorizationServerConfigurerAdapter { @Autowired private AuthenticationManager authenticationManager; @Autowired private UserDetailsService userDetailsService; @Override public void configure(ClientDetailsServiceConfigurer clients) throws Exception { clients.inMemory() .withClient("app-client") .secret("{bcrypt}$2a$10$your_client_secret_hash") .authorizedGrantTypes("password", "refresh_token") .scopes("all") .accessTokenValiditySeconds(3600) .refreshTokenValiditySeconds(86400); } @Override public void configure(AuthorizationServerEndpointsConfigurer endpoints) { endpoints .authenticationManager(authenticationManager) .userDetailsService(userDetailsService) .tokenStore(tokenStore()) .accessTokenConverter(jwtAccessTokenConverter()); } @Bean public TokenStore tokenStore() { return new JwtTokenStore(jwtAccessTokenConverter()); } @Bean public JwtAccessTokenConverter jwtAccessTokenConverter() { JwtAccessTokenConverter converter = new JwtAccessTokenConverter(); converter.setSigningKey("your-256-bit-secret"); // 对称密钥 return converter; } } ``` #### 3. 安全配置 ```java @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Bean @Override public AuthenticationManager authenticationManagerBean() throws Exception { return super.authenticationManagerBean(); } @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.inMemoryAuthentication() .withUser("admin") .password(passwordEncoder().encode("123456")) .roles("ADMIN"); } } ``` ### 二、令牌生成流程 1. **客户端认证**:使用Basic Auth传递client_id和client_secret[^3] 2. **用户认证**:Spring Security验证用户凭证[^2] 3. **令牌生成**:JwtAccessTokenConverter使用HS256算法生成包含标准声明(sub, exp等)的JWT 4. **响应返回**:返回格式示例 ```json { "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", "token_type": "bearer", "expires_in": 3600, "scope": "all" } ``` ### 三、自定义JWT声明 通过TokenEnhancer增强令牌: ```java public class CustomTokenEnhancer implements TokenEnhancer { @Override public OAuth2AccessToken enhance(OAuth2AccessToken accessToken, OAuth2Authentication authentication) { DefaultOAuth2AccessToken token = (DefaultOAuth2AccessToken) accessToken; Map<String, Object> info = new HashMap<>(); info.put("organization", "example_org"); token.setAdditionalInformation(info); return token; } } // 在配置中添加 endpoints.tokenEnhancer(tokenEnhancerChain()); ``` ### 四、测试验证 使用CURL测试令牌获取: ```bash curl -X POST \ -u "app-client:client-secret-8888" \ -d "grant_type=password&username=admin&password=123456&scope=all" \ http://localhost:8080/oauth/token ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值