标签:return String redis 身份验证 token userInfo public Constants SpringBoot
1、创建token接口
public interface TokenManager { /** * 创建token * @param userInfo * @return */ String getToken(UserInfo userInfo); /** * 刷新用户 * @param token */ void refreshUserToken(String token); /** * 用户退出登陆 * @param token */ void loginOff(String token); /** * 获取用户信息 * @param token * @return */ UserInfo getUserInfoByToken(String token); }
2、token实现类
@Component public class RedisTokenManager implements TokenManager { @Autowired private RedisUtils redisUtils; @Autowired private GlobalConfig globalConfig; /** * 创建token * @param userInfo * @return */ public String getToken(UserInfo userInfo){ //使用uuid作为源token String token = UUID.randomUUID().toString().replace("-", ""); String token_format=String.format(Constants.TOKEN_FORMAT,token); redisUtils.set(token_format,userInfo,globalConfig.getTokenExpires()); return token; } /** * 刷新用户 * @param token */ public void refreshUserToken(String token){ token=String.format(Constants.TOKEN_FORMAT,token); if(redisUtils.exists(token)){ redisUtils.setExpireTime(token, globalConfig.getTokenExpires()); } } /** * 用户退出登陆 * @param token */ public void loginOff(String token){ token=String.format(Constants.TOKEN_FORMAT,token); redisUtils.remove(token); } /** * 获取用户信息 * @param token * @return */ public UserInfo getUserInfoByToken(String token){ token=String.format(Constants.TOKEN_FORMAT,token); if(redisUtils.exists(token)){ return (UserInfo)redisUtils.get(token); } return null; } }
3、对TokenManager进行二次封装,每次操作不需要token参数
@Component public class AuthManager { @Autowired private TokenManager tokenManager; /** * 获取请求体 * @return */ public HttpServletRequest getRequest(){ return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); } /** * 登录 * @param userInfo * @return */ public String signIn(UserInfo userInfo){ return tokenManager.getToken(userInfo); } /** * 获取该访问用户信息 * @return */ public UserInfo getUserInfo(){ HttpServletRequest request=getRequest(); String token=request.getAttribute(Constants.USER_TOKEN).toString(); UserInfo userInfo=tokenManager.getUserInfoByToken(token); if(userInfo==null){ throw new AuthException("该用户已过期", HttpStatus.UNAUTHORIZED.value()); } return userInfo; } /** * 刷新该登录用户,延时 */ public void refreshUserInfo(){ HttpServletRequest request=getRequest(); String token=request.getAttribute(Constants.USER_TOKEN).toString(); tokenManager.refreshUserToken(token); } /** * 注销该访问用户 */ public void loginOff(){ HttpServletRequest request=getRequest(); String token=request.getAttribute(Constants.USER_TOKEN).toString(); tokenManager.loginOff(token); } }
4、
对用户进行控制,部分接口可以不登陆访问
@Target({ElementType.METHOD,ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface AuthIgnore { }
5、拦截器:
@Component public class AuthorizationInterceptor extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { AuthIgnore annotation; if(handler instanceof HandlerMethod) { annotation = ((HandlerMethod) handler).getMethodAnnotation(AuthIgnore.class); }else{ return true; } //如果有@AuthIgnore注解,则不验证token if(annotation != null){ return true; } //获取用户凭证 String token = request.getHeader(Constants.USER_TOKEN); if(StringUtils.isBlank(token)){ token = request.getParameter(Constants.USER_TOKEN); } if(StringUtils.isBlank(token)){ Object obj = request.getAttribute(Constants.USER_TOKEN); if(null!=obj){ token=obj.toString(); } } //token凭证为空 if(StringUtils.isBlank(token)){ throw new AuthException(Constants.USER_TOKEN + "不能为空", HttpStatus.UNAUTHORIZED.value()); } return true; } }
标签:return,String,redis,身份验证,token,userInfo,public,Constants,SpringBoot 来源: https://blog.csdn.net/douxingpeng1/article/details/90115936
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。