public String get_token(String H){ int len_H = H.length(); StringBuilder str = new StringBuilder(); try { SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");// SecureRandom to get random digit secureRandom.setSeed(H.getBytes()); // 设置种子 for(int i = 0; i < 32; i++) { str.append(H.charAt(secureRandom.nextInt(len_H))); } } catch (NoSuchAlgorithmException e) { e.printStackTrace(); System.out.println("get_token error!"); } return str.toString(); }
时间: 2023-06-13 15:09:01 浏览: 56
这段代码是一个生成token的方法,它接收一个字符串H作为参数,并返回一个由32个字符组成的字符串。具体实现如下:
1. 获取字符串H的长度len_H
2. 创建一个StringBuilder对象str,用于存储生成的token
3. 创建一个SecureRandom对象secureRandom,用于生成随机数
4. 将字符串H的字节数组作为种子,通过setSeed方法设置到secureRandom对象中
5. 循环32次,每次从字符串H中随机选择一个字符,将其添加到str对象中
6. 返回生成的token
需要注意的是,这里使用了SHA1PRNG算法生成随机数,这是一种基于SHA-1哈希算法的伪随机数生成器,它的输出序列具有良好的随机性和均匀性。此外,如果算法不可用,会抛出NoSuchAlgorithmException异常。
相关问题
String token = request.getHeader(LOGIN_TOKEN_KEY);
这段代码用于从HTTP请求头中获取登录令牌(Token)。具体来说,它通过request.getHeader(LOGIN_TOKEN_KEY)方法获取HTTP请求头中名为LOGIN_TOKEN_KEY的头部信息的值,即登录令牌的值,将其赋值给变量token。
登录令牌通常用于用户身份认证,当用户登录成功后,服务端会生成一个包含用户信息的令牌,并将其返回给客户端。客户端在后续的请求中,需要在HTTP请求头中携带该令牌,以便服务端进行用户身份认证。服务端通过获取HTTP请求头中的令牌,即可获取当前请求的用户信息,从而判断请求是否合法。
async def check_connect(office_site_id: str, end_user_id: str, password: str, desktop_type: str = None, desktop_group_id: str = None, desktop_id: str = None): """ 验证桌面连接 """ from fvtdesktop.ad_user_api import AdUserApi client_id = uuid.uuid4().hex token = await AdUserApi.get_login_token(client_id=client_id, office_site_id=office_site_id, end_user_id=end_user_id, password=password, current_stage=get_current_stage()) if desktop_type == 'Desktopgroup': describe = await AdUserApi.describe_desktops(login_token=token.login_token, protocol_type='BOTH', client_id=client_id, session_id=token.session_id, office_site_id=office_site_id) desktop = list(filter(lambda x: 'desktop_group_id' in x.keys() and x['desktop_group_id'] == desktop_group_id, describe)) result = await get_ticket(desktop_id=desktop[0].desktop_id, client_id=client_id, login_token=token.login_token, session_id=token.session_id) if result == 'Again': await sleep(30) result = await get_ticket(desktop_id=desktop[0].desktop_id, client_id=client_id, login_token=token.login_token, session_id=token.session_id) assert result == 'True' else: result = await get_ticket(desktop_id=desktop_id, client_id=client_id, login_token=token.login_token, session_id=token.session_id) if result == 'Again': await sleep(30) result = await get_ticket(desktop_id=desktop_id, client_id=client_id, login_token=token.login_token, session_id=token.session_id) assert result == 'True'
这是一段 Python 代码,它定义了一个名为 "check_connect" 的异步函数(async function)。该函数的目的是验证桌面连接,它接受以下参数:office_site_id(办公地点 ID)、end_user_id(终端用户 ID)、password(密码)、desktop_type(桌面类型,默认为 None)、desktop_group_id(桌面组 ID,默认为 None)和 desktop_id(桌面 ID,默认为 None)。
函数通过调用 "AdUserApi" 中的 "get_login_token" 方法来获取登录 token。如果 "desktop_type" 等于 "Desktopgroup",则调用 "describe_desktops" 方法,获取桌面的详细信息,并过滤出 "desktop_group_id" 等于 "desktop_group_id" 参数的桌面。然后,调用 "get_ticket" 方法来获取桌面连接的票据。如果返回值为 "Again",则等待 30 秒后再次尝试获取票据。最后,使用 "assert" 语句来断言结果是否为 "True"。
如果 "desktop_type" 不等于 "Desktopgroup",则直接调用 "get_ticket" 方法来获取桌面连接的票据,并执行与上述相同的操作。