private String buildToken( String currentTeamMemberName,String userId) { Map<String, String> kv = new LinkedHashMap<>(); kv.put("userId", userId); kv.put("currentTeamMemberName",currentTeamMemberName); kv.put("salt", "salt"); String signature = Sha1Crypto.encode(JsonHelper.getInstance().write(kv)); kv.remove("salt"); kv.put("signature", signature); kv.put("ts", System.currentTimeMillis()+""); String offset = Configuration.getInstance().getProperty("indicatorPlatformOffset"); if(offset == null || offset.trim().length() == 0){ offset = 1000 * 60 * 5 + ""; } kv.put("offset", offset); String token = JsonHelper.getInstance().write(kv);//Map转JSON String base64Token = Base64Codec.encode(token);//base64编码 return base64Token; }
时间: 2024-04-26 09:21:28 浏览: 70
这个方法是用于生成token的,其中包含了userId、currentTeamMemberName等信息,并且使用了sha1加密算法进行签名,并将生成的信息转化成JSON字符串,最后进行base64编码。这个方法的返回值是一个base64编码后的字符串,可以用于验证用户身份。如果需要将生成的token放入cookie中,可以参考我之前的回答。
相关问题
Java中通过private String buildToken( String currentTeamMemberName,String userId) { Map<String, String> kv = new LinkedHashMap<>(); kv.put("userId", userId); kv.put("currentTeamMemberName",currentTeamMemberName); kv.put("salt", "salt"); String signature = Sha1Crypto.encode(JsonHelper.getInstance().write(kv)); kv.remove("salt"); kv.put("signature", signature); kv.put("ts", System.currentTimeMillis()+""); String offset = Configuration.getInstance().getProperty("indicatorPlatformOffset"); if(offset == null || offset.trim().length() == 0){ offset = 1000 * 60 * 5 + ""; } kv.put("offset", offset); String token = JsonHelper.getInstance().write(kv);//Map转JSON String base64Token = Base64Codec.encode(token);//base64编码 return base64Token; }生成一个token,如何将该token放入cookie中
要将生成的token放入cookie中,可以使用Java Servlet中的HttpServletResponse类的addCookie方法。可以在调用buildToken方法后,将生成的base64Token放入cookie中,代码如下:
```
String token = buildToken(currentTeamMemberName, userId); // 调用buildToken方法
Cookie cookie = new Cookie("token", token); // 创建一个名为token的cookie
response.addCookie(cookie); // 将cookie添加到response中
```
其中,response是HttpServletResponse对象,可以在Servlet中通过参数获取。这样就将生成的token放入了名为token的cookie中,可以通过HttpServletRequest对象的getCookies方法获取该cookie。
String tokenSingle = menuService.buildToken(userMap.get("currentTeamMemberName"), userMap.get("userId"));中的buildToken方法在servic层的SystemMenuService下, 已知方法private String buildToken(String currentTeamMemberName,String userId) { Map<String, String> kv = new LinkedHashMap<>(); kv.put("userId", userId); kv.put("currentTeamMemberName",currentTeamMemberName); kv.put("salt", "salt"); String signature = Sha1Crypto.encode(JsonHelper.getInstance().write(kv)); kv.remove("salt"); kv.put("signature", signature); kv.put("ts", System.currentTimeMillis()+""); String offset = Configuration.getInstance().getProperty("indicatorPlatformOffset"); if(offset == null || offset.trim().length() == 0){ offset = 1000 * 60 * 5 + ""; } kv.put("offset", offset); String token = JsonHelper.getInstance().write(kv);//Map转JSON String base64Token = Base64Codec.encode(token);//base64编码 return base64Token; } 会报错'buildToken(java.lang.String, java.lang.String)' has private access in 'com.bonc.mutirent.service.SystemMenuService' 我不想让方法buildToken为public,该如何解决?
如果您不想将buildToken方法设置为public,可以在同一个包下创建一个辅助类,在该辅助类中调用buildToken方法,并将辅助类的方法设置为public,这样就可以在其他包中使用该辅助类的方法,达到不将buildToken方法公开的效果。
示例代码如下:
在com.bonc.mutirent.service包下创建一个新的辅助类TokenHelper:
```
package com.bonc.mutirent.service;
import java.util.LinkedHashMap;
import java.util.Map;
import com.bonc.mutirent.util.JsonHelper;
import com.bonc.mutirent.util.Sha1Crypto;
import com.bonc.mutirent.util.Base64Codec;
import com.bonc.mutirent.util.Configuration;
public class TokenHelper {
public static String buildToken(String currentTeamMemberName, String userId) {
Map<String, String> kv = new LinkedHashMap<>();
kv.put("userId", userId);
kv.put("currentTeamMemberName", currentTeamMemberName);
kv.put("salt", "salt");
String signature = Sha1Crypto.encode(JsonHelper.getInstance().write(kv));
kv.remove("salt");
kv.put("signature", signature);
kv.put("ts", System.currentTimeMillis()+"");
String offset = Configuration.getInstance().getProperty("indicatorPlatformOffset");
if(offset == null || offset.trim().length() == 0){
offset = 1000 * 60 * 5 + "";
}
kv.put("offset", offset);
String token = JsonHelper.getInstance().write(kv);//Map转JSON
String base64Token = Base64Codec.encode(token);//base64编码
return base64Token;
}
}
```
在需要使用buildToken方法的地方,可以直接调用TokenHelper.buildToken方法,例如:
```
String tokenSingle = TokenHelper.buildToken(userMap.get("currentTeamMemberName"), userMap.get("userId"));
```
这样就可以在不将buildToken方法公开的情况下,通过辅助类的方式调用该方法了。
阅读全文