HarmonyOs开发基于请求进行token验证

故事背景:最近博主在学习鸿蒙开发,苦于没有安卓应用开发的经验,并且在网络上也只有少量的鸿蒙教学,华为官方文档和案例简直一言难尽,所以我觉得有必要进行分享这个技术。

今天博主在对接接口时,发现我的后端是直接获取用户的token,无需用户在前端进行输入什么,这就有个难题,鸿蒙的应用如何获取token呢?我翻阅了大量网站,都没有找到关于一篇这项技术的帖子

无奈,求人不如求己

博主的token验证流程是这样:用户在登录账号时后端会生成一个token,然后用户在后续的只需请求这个接口,接口就会基于这个token进行获取信息,完成用户识别和后续的操作

可这就遇到了难题,不知道鸿蒙如何获取token,所以博主奇思妙想,通过请求来进行传输token,

在登录验证的方法里我们添加上返回的token值

修改Askts,只需要获取登录用户的token即可

可以看到前端获取数据没有问题,现在我们修改接口,实现拼接的操作

  

这里注意,注解需要删除token的验证,因为我们本地是没有存储token的,所以无法获取token,如果加上验证,就会导致异常

然后我们进行拼接请求,加上登录用户的token进行验证

完美实现验证

这个技术简单的说就是:

在传统的Web前端与后端交互的流程是前端登录-后端验证-验证成功生成发送token-前端本地保存后续操作直接请求前端本地token获取用户数据

在这个方法里,前端只需请求一次登录获取token后即可,后续的token请求进行拼接即可

传统:"http://xxxx:8081/userRequestToken"

目前:"http://xxxx:8081/userRequestToken?token=xxxx"

  • 11
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring Boot可以使用基于token请求验证来保护你的API。下面是一个简单的实现步骤: 1. 生成token:首先,你需要生成一个token并将其分发给客户端。可以使用JWT(JSON Web Token)来生成token。JWT包含了加密的信息,比如用户ID、角色等。 2. 配置Spring Security:在你的Spring Boot项目中,你需要配置Spring Security来处理请求验证。可以通过添加`spring-boot-starter-security`依赖来引入Spring Security。 3. 创建Security配置类:创建一个继承自`WebSecurityConfigurerAdapter`的配置类,并覆盖`configure(HttpSecurity http)`方法。在该方法中,可以定义哪些请求需要进行验证。 ```java @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.csrf().disable() .authorizeRequests() .antMatchers("/api/**").authenticated() .anyRequest().permitAll() .and() .addFilterBefore(new JwtTokenFilter(), UsernamePasswordAuthenticationFilter.class) .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS); } } ``` 在上面的示例中,我们通过`antMatchers("/api/**").authenticated()`来定义了需要进行验证请求。你可以根据实际需求修改这个配置。 4. 创建JwtTokenFilter:创建一个自定义的`JwtTokenFilter`类,继承自`OncePerRequestFilter`,用于解析和验证token。 ```java public class JwtTokenFilter extends OncePerRequestFilter { @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { String token = extractToken(request); // 提取token if (token != null && validateToken(token)) { // 验证token Authentication auth = createAuthentication(token); SecurityContextHolder.getContext().setAuthentication(auth); } filterChain.doFilter(request, response); } // 提取token的逻辑 private String extractToken(HttpServletRequest request) { // 从请求头或请求参数中获取token // ... } // 验证token的逻辑 private boolean validateToken(String token) { // 验证token的合法性 // ... } // 创建认证对象 private Authentication createAuthentication(String token) { // 根据token信息创建认证对象 // ... } } ``` 在上面的示例中,我们通过`extractToken`方法从请求中提取token,然后通过`validateToken`方法验证token的合法性,最后通过`createAuthentication`方法创建一个认证对象,将其设置到`SecurityContextHolder`中。 5. 配置认证提供者:创建一个实现了`AuthenticationProvider`接口的认证提供者类,用于验证token的有效性。 ```java @Component public class JwtAuthenticationProvider implements AuthenticationProvider { @Override public Authentication authenticate(Authentication authentication) throws AuthenticationException { String token = (String) authentication.getCredentials(); if (validateToken(token)) { return new JwtAuthenticationToken(token, true); } else { throw new BadCredentialsException("Invalid token"); } } @Override public boolean supports(Class<?> authentication) { return JwtAuthenticationToken.class.isAssignableFrom(authentication); } // 验证token的逻辑 private boolean validateToken(String token) { // 验证token的合法性 // ... } } ``` 在上面的示例中,我们通过`authenticate`方法验证token的有效性,如果有效则返回一个认证对象,否则抛出异常。`supports`方法用于指定该认证提供者支持哪种类型的认证对象。 6. 创建JwtAuthenticationToken:创建一个继承自`AbstractAuthenticationToken`的认证对象,用于封装token信息。 ```java public class JwtAuthenticationToken extends AbstractAuthenticationToken { private final String token; private final boolean authenticated; public JwtAuthenticationToken(String token, boolean authenticated) { super(null); this.token = token; this.authenticated = authenticated; } @Override public Object getCredentials() { return token; } @Override public Object getPrincipal() { return null; } @Override public boolean isAuthenticated() { return authenticated; } } ``` 在上面的示例中,我们通过`getCredentials`方法返回token,`getPrincipal`方法返回null,`isAuthenticated`方法返回认证状态。 7. 使用token进行请求验证:当客户端发送请求时,需要在请求头或请求参数中携带token。在后端的API方法中,你可以通过`@AuthenticationPrincipal`注解获取当前用户的信息。 ```java @RestController public class ApiController { @GetMapping("/api/user") public String getUserInfo(@AuthenticationPrincipal JwtAuthenticationToken authToken) { String token = (String) authToken.getCredentials(); // 根据token获取用户信息 // ... return "User Info"; } } ``` 在上面的示例中,我们通过`@AuthenticationPrincipal`注解获取`JwtAuthenticationToken`对象,然后从中获取token,并根据token获取用户信息。 这样,你就实现了基于token请求验证。请注意,这只是一个简单的示例,你可以根据实际需求进行更复杂的配置和实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值