iis7 新建网站网站建设类行业资讯
iis7 新建网站,网站建设类行业资讯,网站更改,网站首页模板怎么做策划目录 项目结构
主要步骤
auth-service里#xff1a;
1. 配置 pom.xml 依赖
2. 实现HandlerInterceptor 接口的 preHandle 函数
3. 实现 WebMvcConfigurer 的 addInterceptors 接口
4. 生成 token 和验证 token
5. 登录接口示例 user-service 里#xff1a;
6. 实现拦…目录 项目结构
主要步骤
auth-service里
1. 配置 pom.xml 依赖
2. 实现HandlerInterceptor 接口的 preHandle 函数
3. 实现 WebMvcConfigurer 的 addInterceptors 接口
4. 生成 token 和验证 token
5. 登录接口示例 user-service 里
6. 实现拦截以 user-service 为例 ps项目源码等该项目课程答辩结束后会贴出到时候可以看看源码会更清晰 项目结构
以 jwt 鉴权服务auth-service和 user-service 用户服务为例auth-service 和 user-service 两个项目位于目录同级项目结构如下 主要步骤
auth-service里
1. 配置 pom.xml 依赖
dependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-webmvc/artifactId/dependencydependencygroupIdcom.auth0/groupIdartifactIdjava-jwt/artifactIdversion3.10.0/version/dependencydependencygroupIdjavax.servlet/groupIdartifactIdservlet-api/artifactIdversion2.5/version/dependencydependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactId/dependency/dependencies
2. 实现HandlerInterceptor 接口的 preHandle 函数 注意加 ComponentpreHandle 会拦截指定路径的请求若验证成功返回了 return true 然后该接口自己会再转发到对应接口处理请求如果我们return false了就不会继续转发请求
package com.example.authservice.interceptors;import com.auth0.jwt.exceptions.AlgorithmMismatchException;
import com.auth0.jwt.exceptions.SignatureVerificationException;
import com.auth0.jwt.exceptions.TokenExpiredException;
import com.example.authservice.utils.JWTUtils;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;Component
public class JWTInterceptor implements HandlerInterceptor {Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println(*****************************************);System.out.println(开始token验证);System.out.println(*****************************************);MapString, Object map new HashMap();// 获取请求头中令牌String token request.getHeader(token);try {// 验证令牌JWTUtils.verify(token);System.out.println(*****************************************);System.out.println(token验证成功);System.out.println(*****************************************);return true;} catch (SignatureVerificationException e) {e.printStackTrace();map.put(msg,无效签名!);}catch (TokenExpiredException e){e.printStackTrace();map.put(msg,token过期!);}catch (AlgorithmMismatchException e){e.printStackTrace();map.put(msg,token算法不一致!);}catch (Exception e){e.printStackTrace();map.put(msg,token无效!!);}System.out.println(*****************************************);System.out.println(未通过token验证);System.out.println(*****************************************);// 未通过验证设置状态map.put(state,false);// 将map转为json jacksonString json new ObjectMapper().writeValueAsString(map);response.setContentType(application/json;charsetUTF-8);response.getWriter().println(json);return false;}
}
3. 实现 WebMvcConfigurer 的 addInterceptors 接口
注册前面写的拦截器 指定拦截路径 .addPathPatterns 和不拦截路径 .excludePathPatterns注意 拦截所有路径要用 /** ——两个*不要写成一个了记得加 Configuration一般登录接口不拦截 登录接口可以也写在 auth-service 服务中更方便 ps我本来写在 user-service 里的本地运行也没问题但是当我 maven 打包时一直会出现找不到 auth-service 这个模块具体是 login 接口需要调用JWTUtils 的接口进行 token 验证这里一直报错找不到这个 import可是我明明 user-service 里已经添加依赖了试了网上方法都不行。于是放弃直接将 login 接口写在 auth-service 里就避免了在 user-service 里直接调用 suth-service 的接口但还是需要添加 suth-service 依赖的因为要实现请求拦截后面也会说到这个时候再 maven 打包就可以了有点玄学在的、、、
package com.example.authservice.config;import com.example.authservice.interceptors.JWTInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
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 {Autowiredprivate JWTInterceptor jWTInterceptor;Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(jWTInterceptor).addPathPatterns(/user/**).excludePathPatterns(/auth/login);}
}
4. 生成 token 和验证 token
此处 SHA256 加密getToken(MapString,String map)函数生成 token代码注释写了一个萝卜一个坑按需填空即可验证 token 合法性的函数照抄就好
package com.example.authservice.utils;import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTCreator;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;import java.util.Calendar;
import java.util.Map;public class JWTUtils {private static final String SIGNATURE !#$SGW^HDY*%G;/*** 生成token*/public static String getToken(MapString,String map){// 默认7天过期Calendar instance Calendar.getInstance();instance.add(Calendar.DATE,7);// 创建jwt builderJWTCreator.Builder builder JWT.create();// 设置payloadmap.forEach(builder::withClaim);// 指定令牌过期时间return builder.withExpiresAt(instance.getTime()).sign(Algorithm.HMAC256(SIGNATURE));}/*** 验证token合法性*/public static DecodedJWT verify(String token){return JWT.require(Algorithm.HMAC256(SIGNATURE)).build().verify(token);}
}5. 登录接口示例
写在 auth-service 里主要逻辑就是在 controller 层示例如下
package com.example.authservice.controller;import com.example.authservice.utils.JWTUtils;
import com.example.authservice.service.AuthService;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import springfox.documentation.swagger2.annotations.EnableSwagger2;import java.util.HashMap;
import java.util.Map;Api(tags {登录鉴权接口文档})
RestController
RequestMapping(/auth)
EnableSwagger2
public class AuthController {Autowiredprivate AuthService authService;PostMapping(/login)ResponseBodypublic MapString,Object login(String SID, String SPassword) {MapString, Object result new HashMap();if(authService.login(SID, SPassword)){MapString, String payLoad new HashMap();payLoad.put(id, SID);String token JWTUtils.getToken(payLoad);result.put(token, token);result.put(state, true);result.put(msg, 登录成功);}else {result.put(state,false);result.put(msg, 登录失败);}return result;}
}user-service 里
6. 实现拦截以 user-service 为例
要实现拦截需要以下步骤
user-service 的 pom.xml 里配置 auth-service 依赖 dependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency!--JWT--dependencygroupIdcom.auth0/groupIdartifactIdjava-jwt/artifactIdversion3.10.0/version/dependency!-- 添加对authservice模块的依赖 --dependencygroupIdcom.example/groupIdartifactIdauth-service/artifactIdversion0.0.1-SNAPSHOT/version/dependency!-- 排除继承自authservice模块的该依赖否则会冲突--dependencygroupIdjavax.servlet/groupIdartifactIdservlet-api/artifactIdversion2.5/versionexclusionsexclusiongroupIdjavax.servlet/groupIdartifactIdservlet-api/artifactId/exclusion/exclusions/dependency/dependencies
服务启动类上把 auth-service 加上这样才能扫描到这个包但是注意SpringBootApplication 本来是默认扫描该启动类对应的包的如果加了指定扫描包选项那么也要把这个启动类自己对应的那个包写上不然自己都扫描不到了即
SpringBootApplication(scanBasePackages{com.example.userservice, com.example.authservice}) 参考
jwt 鉴权参考
深入浅出JWT的token鉴权机制_jwtutils.token_header-CSDN博客
FrameWork/springbootjwt at master · EamonHu/FrameWork · GitHub
拦截器不起作用看这篇
Spring Boot 拦截器无效不起作用_判断拦截器是否起作用-CSDN博客
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/88927.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!