当前位置: 首页 > news >正文

嘉兴网站建设方案策划wordpress图片搬到聚合图床

嘉兴网站建设方案策划,wordpress图片搬到聚合图床,网络营销推广方法认定大将军21,德州网站收录1、业务逻辑 有一些接口#xff0c;需要用户登录以后才能访问#xff0c;用户没有登录则无法访问。 因此#xff0c;对于一些限制用户访问的接口#xff0c;可以在请求头中增加一个校验参数#xff0c;用于判断接口对应的用户是否登录。 而对于一些不需要登录即可访问的接…1、业务逻辑 有一些接口需要用户登录以后才能访问用户没有登录则无法访问。 因此对于一些限制用户访问的接口可以在请求头中增加一个校验参数用于判断接口对应的用户是否登录。 而对于一些不需要登录即可访问的接口则需要进行放行操作。 2、代码逻辑 用户访问登录接口校验通过则生成token标识并且将token存入缓存请求其它接口时在请求头中添加token参数后台收到请求后根据接口路径的匹配程度决定是否对此次请求进行token校验需要校验的请求会在到达controller层之前被拦截进行对应的逻辑判断和校验校验通过的请求会顺利到达controller层不通过则立即将校验失败的结果返回。 3、代码具体实现 1生成token 采用JWT方式生成token登录成功后将用户的部分信息加密后生成token并且保存到redis中。 dependencygroupIdcom.auth0/groupIdartifactIdjava-jwt/artifactIdversion3.14.0/version /dependency import com.auth0.jwt.JWT; import com.auth0.jwt.JWTCreator; import com.auth0.jwt.algorithms.Algorithm; import com.auth0.jwt.interfaces.DecodedJWT; import com.mashibing.internalcommon.dto.TokenResult; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.Map; public class JWTUtils {// JWT签名private static final String SIGN i_am_study; // 用户信息private static final String JWT_KEY_PHONE phone;private static final String JWT_KEY_IDENTITY identity;private static final String TOKEN_TYPE tokenType;private static final String TOKEN_TIME tokenTime;/*** 根据用户信息生成JWT* param passengerPhone 手机号* param identity 用户身份类型标识* param tokenType token类型标识* return*/public static String generatorToken(String passengerPhone, String identity, String tokenType){MapString, String map new HashMap();map.put(JWT_KEY_PHONE, passengerPhone);map.put(JWT_KEY_IDENTITY, identity);map.put(TOKEN_TYPE, tokenType);map.put(TOKEN_TIME, Calendar.getInstance().getTime().toString());// 整合 mapJWTCreator.Builder builder JWT.create();map.forEach((k, v) - {builder.withClaim(k, v);});String sign builder.sign(Algorithm.HMAC256(SIGN));return sign;}/*** 解析JWT获取用户信息* param token JWT类型字符串* return*/public static TokenResult paseToken(String token) {DecodedJWT verify JWT.require(Algorithm.HMAC256(SIGN)).build().verify(token);String phone verify.getClaim(JWT_KEY_PHONE).asString();String identity verify.getClaim(JWT_KEY_IDENTITY).asString();TokenResult tokenResult new TokenResult();tokenResult.setIdentity(identity);tokenResult.setPhone(phone);return tokenResult;}/*** 验证JWT合法性 * param token JWT字符串* return*/public static TokenResult checkToken(String token) {TokenResult tokenResult null;try {tokenResult JWTUtils.paseToken(token);} catch (Exception e) {}return tokenResult;}}2Redis获取token 用户登录采用的是手机号验证码的方式根据手机号从Redis中拿到验证码并与用户输入的验证码进行比较如果相等则返回双token。 /*** 用户根据手机号和验证码登录 * param driverPhone 手机号 * param verificationCode 验证码 * return*/ public ResponseResult checkVerficationCode(String driverPhone, String verificationCode) {// 1.根据手机号获取验证码String key RedisPrefixUtils.generatorKeyByPhone(driverPhone, IdentityConstant.DRIVER_IDENTITY);String codeRedis redisTemplate.opsForValue().get(key);System.out.println(从redis获取的验证码是 codeRedis);// 2.校验验证码if (StringUtil.isNullOrEmpty(codeRedis)) {return ResponseResult.fail(CommonStatusEnum.VERIFICATON_CODE_EXPIRE.getCode(),CommonStatusEnum.VERIFICATON_CODE_EXPIRE.getValue());}if (!verificationCode.trim().equals(codeRedis)){return ResponseResult.fail(CommonStatusEnum.VERIFICATION_CODE_ERRO.getCode(),CommonStatusEnum.VERIFICATION_CODE_ERRO.getValue());}// 4.生成token返回String accessToken JWTUtils.generatorToken(driverPhone, IdentityConstant.DRIVER_IDENTITY, TokenConstant.ACCESS_TOKEN_TYPE);String refreshToken JWTUtils.generatorToken(driverPhone, IdentityConstant.DRIVER_IDENTITY, TokenConstant.REFRESH_TOKEN_TYPE);// 生成keyString accessTokenKey RedisPrefixUtils.generatorTokenKey(driverPhone, IdentityConstant.DRIVER_IDENTITY, TokenConstant.ACCESS_TOKEN_TYPE);String refreshTokenKey RedisPrefixUtils.generatorTokenKey(driverPhone, IdentityConstant.DRIVER_IDENTITY, TokenConstant.REFRESH_TOKEN_TYPE);// 存到redisredisTemplate.opsForValue().set(accessTokenKey, accessToken, 30, TimeUnit.DAYS);redisTemplate.opsForValue().set(refreshTokenKey, refreshToken, 31, TimeUnit.DAYS);// 结果返回TokenResponse tokenResponse new TokenResponse();tokenResponse.setAcccessToken(accessToken);tokenResponse.setRefreshToken(refreshToken);return ResponseResult.success(tokenResponse); } 3校验token 重写HandlerInterceptor接口的preHandle方法拿到token进行判断 。 只需要从请求头中拿到token然后根据token拿到对应的存储到redis中的key根据key查询redis判断是否存在对应token存在则放行不存在则不放行。 在拦截器中编写token校验逻辑 import net.sf.json.JSONObject; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.PrintWriter;public class JwtInterceptor implements HandlerInterceptor {Autowiredprivate StringRedisTemplate stringRedisTemplate;Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {String token request.getHeader(Authorization);boolean result true;String resultString ;// 解析token校验token的准确性 TokenResult tokenResult JWTUtils.checkToken(token);if(tokenResult null){resultString token valid;result false;}else {// 解析token获取token中携带的参数信息 tokenResult JWTUtils.paseToken(token);// 判断redis中是否存在对应token即判断token是否到期 String tokenKey RedisPrefixUtils.generatorTokenKey(tokenResult.getPhone(), IdentityConstant.DRIVER_IDENTITY, TokenConstant.ACCESS_TOKEN_TYPE);String redisToken stringRedisTemplate.opsForValue().get(tokenKey);if (redisTokennull || !redisToken.trim().equals(token)){resultString token valid;result false;}}if (!result) {// 告知前端PrintWriter out response.getWriter();out.print(JSONObject.fromObject(ResponseResult.fail(resultString)).toString());}return result;} }将重写之后的拦截器加入到spring容器中 import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; // 将拦截器注册 Configuration public class InterceptorConfig implements WebMvcConfigurer {Beanpublic JwtInterceptor jwtInterceptor(){return new JwtInterceptor();}Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(jwtInterceptor())// 拦截的路径.addPathPatterns(/**)// 不拦截的路径.excludePathPatterns(/noauth,/error,/verification-code,/verification-code-check);}}
http://www.dnsts.com.cn/news/48267.html

相关文章:

  • 网站简繁体转换js媒体营销
  • 网站手机客户端制作药品网上商城
  • 网站备案时间会过期吗装修免费预约平台
  • 建设网站需要学习什么excel导入wordpress
  • app网页制作教程百度seo关键词怎么设置
  • 站长之家官网入口昆明网站建设开发外包
  • 做网页的素材网站seo优化关键词稳定在首页
  • 中国建设监理协会继续教育网站wordpress 产生大量首页
  • 无锡微信网站定制一个网站怎么做软件
  • 做设计比较好的网站推荐jsp做网站步骤
  • 麒贺丝网做的网站优化玉林建设银行网站
  • 微信网站开发详解佛山网站建设推广厂商排名
  • 怎么看网站是否被收录wordpress 替换google字体
  • 高校移动门户网站建设微网站建设套餐
  • 购物网站建设的意义与目的鞋网站建设
  • 有没有专门做美食海报的网站网站开发质量管理
  • 重庆智慧团建网站登录平台网页广告设计师培训
  • 能进入各种网站的浏览器好用的网站管理系统
  • 一些好用的网站商场设计总平面图
  • 网络管理网站策划书施工企业管理杂志官网
  • 网站首页图片制作红杭州网站建设
  • 高端建站费用一媒体app软件下载老版本
  • 营销单页网站创意设计报告
  • 浙江华纳建设有限公司网站网络工程好就业吗
  • 网站建设经费的函一个网站做三个关键词
  • 手机免费建站教程qq网页版登录
  • 哪个网站做图文素材多找人做购物网站
  • 网站开发中如何制作登录页面卖线面网站
  • 东莞市建设企业网站企业python网站开发演示
  • 广州网站建设推荐乐云seo网址大全2345仙踪林