前后端整合前端如何通过login获取后端接口以及如何发送rawData以及encryptedData等敏感信息

我们知道开始的时候前后端是分离的,我们要先创建连接才能让数据在前后端传值。
为了方便大家理解,我这里设置了一个情景:
我们“登录”页面登录后会跳转到“我的”页面,这个时候我们要先判断用户到底登录了没有,那我们怎么去判断呢,我们选择用状态码区分用户到底有没有登录成功,“我的”页面拿到这个值后怎么办的,后端怎么知道你有没有登录成功?我们可以通过uni.request把“我的”页面获得的信息状态码以及加密后的信息传给后端,最后通过sucess接收后端数据,整个流程算是结束了。但是值得注意的是,在uniapp大都是异步处理,比如两个同级的方法,他们里面都有success,现在执行的顺序是:方法一方法体除了success都执行,再执行方法二方法体除了sucess都执行,执行方法一中的success,最后执行方法二中的success
以下为事例代码:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一个基于注解的例子。 首先,您需要创建一个注解类,例如: ```java @Target(ElementType.PARAMETER) @Retention(RetentionPolicy.RUNTIME) public @interface Decrypt { } ``` 这个注解将用于标记需要解密的请求参数。 接下来,您需要创建一个参数解析器类,用于解析带有@Decrypt注解的请求参数。例如: ```java @Component public class DecryptArgumentResolver implements HandlerMethodArgumentResolver { private static final String SECRET_KEY = "your_secret_key_here"; @Override public boolean supportsParameter(MethodParameter parameter) { return parameter.hasParameterAnnotation(Decrypt.class); } @Override public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception { HttpServletRequest request = (HttpServletRequest) webRequest.getNativeRequest(); String encryptedData = request.getParameter(parameter.getParameterName()); if (encryptedData != null && !encryptedData.isEmpty()) { String decryptedData = decrypt(encryptedData, SECRET_KEY); if (decryptedData != null) { return decryptedData; } } return null; } private String decrypt(String encryptedData, String secretKey) { try { byte[] keyBytes = Arrays.copyOf(secretKey.getBytes("ASCII"), 16); SecretKeySpec key = new SecretKeySpec(keyBytes, "AES"); Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); cipher.init(Cipher.DECRYPT_MODE, key); byte[] decryptedData = cipher.doFinal(Base64.getDecoder().decode(encryptedData)); return new String(decryptedData, "UTF-8"); } catch (Exception e) { return null; } } } ``` 这个参数解析器将解析带有@Decrypt注解的请求参数,并尝试解密参数值(使用AES加密算法)。如果解密成功,就返回解密后的数据;否则返回null。 现在,您需要在Spring Boot应用程序中注册这个参数解析器: ```java @Configuration public class WebMvcConfig implements WebMvcConfigurer { @Autowired private DecryptArgumentResolver decryptArgumentResolver; @Override public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) { resolvers.add(decryptArgumentResolver); } } ``` 现在,当您的Vue前端应用程序向后端API发送POST请求时,可以将需要解密的请求参数带上@Decrypt注解。例如: ```java @RestController @RequestMapping("/api/user") public class UserController { @PostMapping("/login") public ResponseEntity<?> login(@Decrypt String data) { // TODO: do something with the decrypted data return ResponseEntity.ok().build(); } } ``` 这个控制器方法将使用@Decrypt注解标记请求参数,并且参数解析器将在解析参数时尝试解密参数值。 最后,当您的Vue前端应用程序发送POST请求时,只需要将需要解密的数据使用AES加密算法加密,并将加密后的数据作为请求参数发送即可。例如: ```javascript axios.post('/api/user/login', { data: encrypt(JSON.stringify({ username: 'foo', password: 'bar' }), 'your_secret_key_here') }).then(response => { console.log(response.data); }); function encrypt(data, secretKey) { let key = CryptoJS.enc.Utf8.parse(secretKey); let encryptedData = CryptoJS.AES.encrypt(data, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }); return encryptedData.toString(); } ``` 希望这个例子对您有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值