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

做外贸没有网站建设银行小微企业网站进不了

做外贸没有网站,建设银行小微企业网站进不了,seo网络优化师,seo新闻目录 一#xff0c;说明#xff1a;二#xff0c;Token、Session和Cookie比较三#xff0c;Spring Boot项目集成JWT1#xff0c;引入依赖2#xff0c;Token工具类3#xff0c;定义拦截器4#xff0c;注册拦截器5#xff0c;编写登录代码6#xff0c;测试 四#xff… 目录 一说明二Token、Session和Cookie比较三Spring Boot项目集成JWT1引入依赖2Token工具类3定义拦截器4注册拦截器5编写登录代码6测试 四说明 一说明 Token的引入客户端向服务端请求数据时一般都会加入验证信息比如客户端在请求的信息中携带用户名、密码服务端会校验用户名和密码是否正确校验通过响应该客户端请求。但是每次都携带用户名和密码无疑有些繁琐而且也不安全在这种背景下Token便应运而生。Token在计算机身份认证中是令牌的意思。Token的定义Token是服务端生成的一串字符串用来作为客户端请求的一个令牌。Token是客户端第一次登录时由服务端生成并将其返回给客户端以后客户端只需带上这个Token前来请求数据即可无需带上用户名和密码。 二Token、Session和Cookie比较 Session和Cookie区别 数据存放位置不同Session数据是存在服务器中的Cookie数据存放在浏览器当中安全程度不同Session存储在服务器中比Cookie存储在浏览器中安全程度要高性能使用程度不同Session存储在服务器上数量过多会影响服务器性能数据存储大小不同单个Cookie保存的数据不能超过4KSession存储在服务端根据服务器大小决定。 Token和Session区别 Token是开发定义的Seesion是http协议规定的Token一般不存储Session存储在服务器中且在分布式环境中Session会失效 三Spring Boot项目集成JWT 我们实现如下功能客户端登录获取Token请求时携带Token服务端对携带的Token进行验证若是有效Token则放行非法或是过期Token拦截给出说明信息后直接返回。代码中抛出的异常以及返回的实体类信息是自定义异常详细可参考该博客自定义异常。 1引入依赖 !--hutool--dependencygroupIdcn.hutool/groupIdartifactIdhutool-all/artifactId/dependency!---jwtjava web token--dependencygroupIdcom.auth0/groupIdartifactIdjava-jwt/artifactId/dependency2Token工具类 通过该工具类来生成Token以及从请求头中获取token来获取当前用户的信息。 package com.tick.tack.utils;import cn.hutool.core.date.DateUtil; import com.auth0.jwt.JWT; import com.auth0.jwt.algorithms.Algorithm; import com.tick.tack.manager.entity.User; import com.tick.tack.manager.service.IUserService; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes;import javax.annotation.PostConstruct; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.util.Date;Component public class TokenUtils {// 日志类private static final Logger log LoggerFactory.getLogger(TokenUtils.class);private static IUserService staticUserService;Resourceprivate IUserService userService;PostConstructpublic void setUserService() {//必须加Component注解后才会执行该段代码在spring容器中初始化staticUserService userService;}public static String getToken(String userId, String password) {return JWT.create().withAudience(userId) //将userId保存到token里面作为载荷.withExpiresAt(DateUtil.offsetHour(new Date(), 2))//2小时候过期.sign(Algorithm.HMAC256(password));//以password作为token的密钥}/*** 获取当前登录的用户信息*/public static User getCurrentUser() {try {HttpServletRequest request ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();// 从请求头中获取token信息String token request.getHeader(token);if (StringUtils.isNotBlank(token)) {String userAccount JWT.decode(token).getAudience().get(0);return staticUserService.queryUserByAccount(userAccount);}} catch (Exception e) {e.printStackTrace();}return null;} }3定义拦截器 AuthAccess是一个自定义的注解在拦截器中判断如果方法上有加入该注解则放行不校验token package com.tick.tack.common.interceptor;import cn.hutool.jwt.JWTException; import com.auth0.jwt.JWT; import com.auth0.jwt.JWTVerifier; import com.auth0.jwt.algorithms.Algorithm; import com.tick.tack.common.Constants; import com.tick.tack.config.AuthAccess; import com.tick.tack.exception.ServiceException; import com.tick.tack.manager.entity.User; import com.tick.tack.manager.service.IUserService; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;public class JWTInterceptor implements HandlerInterceptor {Autowiredprivate IUserService userService;Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {String token request.getHeader(token);//如果不是映射到方法直接通过if (!(handler instanceof HandlerMethod)) {return true;} else {// 判断是否为自定义注解AuthAccess如果是就不校验了直接放行HandlerMethod h (HandlerMethod) handler;AuthAccess authAccess h.getMethodAnnotation(AuthAccess.class);if (authAccess ! null) {return true;}}//执行认证if (StringUtils.isBlank(token)) {throw new ServiceException(Constants.CODE_401, 无token请重新登录);}//获取token中的user id验证是否合法String userAccount;try {userAccount JWT.decode(token).getAudience().get(0);} catch (JWTException jwt) {throw new ServiceException(Constants.CODE_401, token验证失败);}//根据token中的用户账号查询数据库信息User user userService.queryUserByAccount(userAccount);if (user null) {throw new ServiceException(Constants.CODE_401, 用户不存在请重新登录);}//用户密码加签验证tokenJWTVerifier jwtVerifier JWT.require(Algorithm.HMAC256(user.getPassword())).build();try {//通过 verifier.verify() 方法检验 token如果token不符合则抛出异常jwtVerifier.verify(token);} catch (Exception e) {throw new ServiceException(Constants.CODE_401, e.getMessage());}return true;} } 自定义注解 package com.tick.tack.config;import java.lang.annotation.*;Target({ElementType.METHOD}) Retention(RetentionPolicy.RUNTIME) Documented public interface AuthAccess { }4注册拦截器 将拦截器注册到SpringMVC中 package com.tick.tack.config;import com.tick.tack.common.interceptor.JWTInterceptor; 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 {Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(jwtInterceptor())//拦截的路径.addPathPatterns(/**) //拦截所有请求通过判断token是否合法来决定是否需要登录//排除不校验的接口.excludePathPatterns(/loginUser, //排除路径的时候不用考虑全局上下文context-path/register,//Swagger页面拦截取消/swagger-resources/**, /webjars/**, /v3/**, /swagger-ui.html/**, doc.html, /error);}//考虑到UserService此处需要注入一下Beanpublic JWTInterceptor jwtInterceptor() {return new JWTInterceptor();} }5编写登录代码 1登录实体类 Data public class LoginUser {// 登入用户名private String userAccount;// 登录密码private String password; }2token实体类 Data public class TickToken {// 用户名private String userAccount;// 密码private String password;// tokenprivate String token;// 到期时间private Date expireTime; }3系统登录控制类 RestController public class LoginController {Autowired //按照类型注入Qualifier(value loginServiceImpl)private ILoginService ILoginService;//登录系统PostMapping(/loginUser)public Result loginSystem(RequestBody LoginUser user) {if (StringUtils.isBlank(user.getUserAccount()) || StringUtils.isBlank(user.getPassword())) {return Result.error(Constants.CODE_400, 参数错误);}TickToken tickToken ILoginService.loginSystem(user);return Result.success(tickToken);} }4业务逻辑实现类 public TickToken loginSystem(LoginUser user) {User one userService.queryUserByAccount(user.getUserAccount());if (one ! null one.getPassword().equals(user.getPassword())) {TickToken tickToken new TickToken();//生成token信息并返回String token TokenUtils.getToken(one.getUserAccount(), one.getPassword());tickToken.setToken(token);// 设置过期时间当前时间两小时以后tickToken.setExpireTime(DateUtil.offsetHour(new Date(),2));// 处理用户的菜单信息在登录的时候返回给用户ListMenu roleMenus getRoleMenus(one);//tickToken.setMenus(roleMenus);return tickToken;} else {throw new ServiceException(Constants.CODE_600, 用户名或密码错误);}}6测试 1测试拦截 当前未登录测试拦截是否生效 RestController RequestMapping(/demo) public class DemoController {GetMapping(/{id})//AuthAccesspublic Result getUser(PathVariable(id) Integer id) {User user new User(1, zhangSan);return Result.success(user);} }未登录也没有加相应注解会提示没有token信息。 2登录获取token * 3携带token请求 如部分接口不希望被拦截则为该接口方法加上AuthAccess注解即可。 四说明 该token是基于账户和密码来生成的一串字符串并指定了过期时间假如登录请求是在A机器实现下一次请求在经过负载均衡后负载到B机器B机器也可对其验证因为token已经包括了全部的验证信息服务器不保存相关信息这样在分布式环境下也可正常使用。
http://www.w-s-a.com/news/548943/

相关文章:

  • 福州网站建设招聘信息哈尔滨中企动力科技股份有限公司
  • 军事新闻最新seo关键词查询排名软件
  • 免费网站建设官网项目建设表态发言
  • 平谷建站推广广告投放平台主要有哪些
  • 网站备案掉了什么原因步骤怎么读
  • 徐州市建设监理协会网站做一个公司官网需要多少钱
  • 网站开发学什么数据库做公司网站注意事项
  • 游戏开发网站建设国际战事最新消息
  • 达州+网站建设网站里自己怎么做推广
  • 看网站建设公司的网站案例熊掌号接入wordpress
  • 黄石下陆区建设局网站wordpress如何拖移小工具
  • 宁波网站建设信息网站开发看书
  • 网站建设优化价格北京优化seo排名
  • 微信网站建设公司费用高端网站建设 炫酷
  • 北京网站假设销售找客户最好的app
  • 做外贸需要关注的网站有什么好处宜州设计公司
  • 公司最近想做个网站怎么办陕西科强建设工程有限公司官方网站
  • 生态城门户网站 建设动态it外包收费
  • 网站项目评价老渔哥网站建设公司
  • 哈尔滨寸金网站建设价格178软文网
  • 一个网站建设的成本网站开发过程及要点
  • 监控视频做直播网站中国建筑人才网下载
  • 网站建设公司华网天下买送活动集团网站设计案例
  • 哪些网站比较容易做哪个网站做中高端衣服
  • 做php网站教程wordpress去水印
  • 深圳微网站建设公司哪家好潍坊专业做网站的公司
  • 网站的弹窗广告怎么做软件开发包括
  • 网站开发人员保密做最优秀的自己演讲视频网站
  • 一般做网站要多少钱怎样选择高性价比的建站公司
  • 免费私人网站建设软件高端网站设计平台高端网站设计企业