当前位置:网站首页>50:第五章:开发admin管理服务:3:开发【查询admin用户名是否已存在,接口】;(这个接口需要登录时才能调用;所以我们编写了拦截器,让其拦截请求,判断用户是否是登录状态;)
50:第五章:开发admin管理服务:3:开发【查询admin用户名是否已存在,接口】;(这个接口需要登录时才能调用;所以我们编写了拦截器,让其拦截请求,判断用户是否是登录状态;)
2022-07-25 05:27:00 【小枯林】
说明:
(1)本篇博客内容:开发【查询admin用户名是否已存在,接口】;
目录
1.在【api】接口工程的AdminMngControllerApi接口中,定义【查询admin用户名是否已存在,接口】;
2.在【admin】管理服务的AdminMngController类中,去实现【查询admin用户名是否已存在,接口】;
4.【查询admin用户名是否已存在,接口】,也是需要用户在登录的时候,才能够操作的;
(1)首先,在【api】接口工程中,创建AdminTokenInterceptor拦截器,去拦截请求,根据请求判断用户是登录状态;
(2)然后,在【api】接口工程中,在InterceptorConfig类,去配置AdminTokenInterceptor拦截器;
一:开发【查询admin用户名是否已存在,接口】;
0.合理性说明;
在【49:第五章:开发admin管理服务:2:开发【管理员登录】接口;】中,管理员用户登录后,会跳转到下面这个页面;
然后,我们就可以去设置管理员用户了;
● 前面也提到了,管理员的登录名是不允许重名的;所以,我们在前端浏览器上输入"登录名"的时候,前端代码会捕获这输入动作;然后,其会自动调用后端相应的接口,去检查输入的登录名是否存在重名的情况;
● 所以,我们先去开发【查询admin用户名是否已存在,接口】;
1.在【api】接口工程的AdminMngControllerApi接口中,定义【查询admin用户名是否已存在,接口】;
/** * 查询admin用户名,是否已存在; * @param username * @return */ @ApiOperation(value = "查询admin用户名,是否已存在", notes = "查询admin用户名,是否已存在", httpMethod = "POST") @PostMapping("/adminIsExist") //设置路由,这个是需要前后端约定好的; public GraceJSONResult adminIsExist(@RequestParam String username);说明:
(1)这个接口的url,请求方式,参数;不是瞎写的,前后端需要保持一致;
2.在【admin】管理服务的AdminMngController类中,去实现【查询admin用户名是否已存在,接口】;
/** * 查询admin用户名,是否已存在; * @param username * @return */ @Override public GraceJSONResult adminIsExist(String username) { checkAdminExist(username);//【判断admin用户名,是否已存在】的逻辑,我们单独抽成了一个方法; return GraceJSONResult.ok(); } /** * 工具方法:判断admin用户名,是否已存在; * @param username */ private void checkAdminExist(String username) { // 1.调用Service层的方法,根据用户名,尝试去数据库中查,看是否有这个用户; AdminUser adminUser = adminUserService.queryAdminByUsername(username); if (adminUser != null) { //如果该管理员name已存在,直接抛一个包含"管理员登录名已存在!"信息的MyCustomException自定义异常; GraceException.display(ResponseStatusEnum.ADMIN_USERNAME_EXIST_ERROR); } }说明:
(1)service层的【根据"管理员用户名",查询管理员用户的方法queryAdminByUsername(username);】在上篇博客中,已经开发好了;
(2)【根据"管理员用户名",查询管理员用户;】这个逻辑,我们单独抽成了一个方法;
3.测试;
(1)先全局install一下整个项目;
(2)然后,启动前端项目;记得使用SwitchHost开启虚拟域名映射;
(3)启动【admin】管理服务的主启动类;
……………………………………………………
(4)然后,输入不同的admin用户名;
4.【查询admin用户名是否已存在,接口】,也是需要用户在登录的时候,才能够操作的;
PS:这一点在【36:第三章:开发通行证服务:19:拦截那些“想要访问【获得用户账户信息,接口】和【更改/完善用户信息,接口】的请求“,检查登录信息,校验通过后再放行;(使用【Spring MVC中的拦截器】来实现)】、【44:第四章:开发文件服务:5:在【files】文件服务中,整合FastDFS,实现【上传头像】的逻辑;】中都有设置;
(1)首先,在【api】接口工程中,创建AdminTokenInterceptor拦截器,去拦截请求,根据请求判断用户是登录状态;
package com.imooc.api.interceptors; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * 目前为止:拦截访问【更改/完善用户信息,接口】、【获得用户账户信息,接口】,检查用户登录状态是否OK; */ public class AdminTokenInterceptor extends BaseInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { //首先,尝试从请求的header中,获取"adminUserId"和"adminUserToken"; // 也就是获取,前面在调用【查询admin用户名是否已存在,接口】时设置进前端浏览器cookie中的"uid"和"utoken"; // PS:前端在发起请求的时候,前端程序会把cookie中"uid"和"utoken"设置进请求头;然后,设置的时候,其名字就分别设置为了"adminUserId"和"adminUserToken"; // 所以,这儿别瞎写,一定要和前端写的保持一致; // PS:如果这个请求的header中没有"adminUserId"和"adminUserToken",其获取的就是空; String userId = request.getHeader("adminUserId"); String token = request.getHeader("adminUserToken"); //调用BaseInterceptor中编写的方法,判断一下请求的header中的"adminUserId"和"adminUserToken"是否OK; // 也就是说,判断一个前端用户是否是登录的; boolean run = verifyUserIdToken(userId, token,REDIS_ADMIN_TOKEN); System.out.println(run); //如果上面的verifyUserIdToken()执行没问题,那么就说当前用户是登录的了, // 就能走到这一步,直接return true,放行这个请求,让其去访问【更改/完善用户信息,接口】、【获得用户账户信息,接口】; return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { } }说明:
(1)这儿的写法,可以参考 【36:第三章:开发通行证服务:19:拦截那些“想要访问【获得用户账户信息,接口】和【更改/完善用户信息,接口】的请求“,检查登录信息,校验通过后再放行;(使用【Spring MVC中的拦截器】来实现)】;
(2)从请求头中,尝试获取"adminUserId"和"adminUserToken";这俩,别瞎写,需要前后端保持一致;
(3)我们需要在BaseInterceptor中,定义REDIS_ADMIN_TOKEN;(用户获取管理员用户登录时,存到redis中的token)
(2)然后,在【api】接口工程中,在InterceptorConfig类,去配置AdminTokenInterceptor拦截器;
@Bean public AdminTokenInterceptor adminTokenInterceptor() { return new AdminTokenInterceptor(); } // 【查询admin用户名是否已存在,接口】是需要登录才能操作的; registry.addInterceptor(adminTokenInterceptor()) .addPathPatterns("/adminMng/adminIsExist");
(3)效果;
先全局install一下整个项目;然后,启动前端项目;记得使用SwitchHost开启虚拟域名映射;启动【admin】管理服务的主启动类;
如果,我们清除掉cookie信息,让其不再是登录状态;
边栏推荐
- How to carry out the function test with simple appearance and complex interior?
- VIM search and replacement and the use of regular expressions
- Easyrecovery free data recovery tool is easy to operate and restore data with one click
- 学习记录[email protected]研发效能度量指标
- Oracle 用户A删除用户B名下的一张表后,用户B可以通过回收站恢复被删除的表吗?
- In depth understanding of pre post + +, -- and negative modulus
- Introduction to interface in SystemVerilog
- Render Optimization: repaint and reflow
- Redis集群搭建(Windows)
- Which website is suitable for physical server
猜你喜欢

CSDN编程挑战赛之数组编程问题

LeetCode 15:三数之和

rhcsa暑假第三天

ThreadLocal

Microservices and related component concepts

Odoo14 | about the abnormal display of statusbar keyword after use and Its Solutions

Introduction to interface in SystemVerilog

Realsense d435i depth map optimization_ High precision mode

微服务 - 远程调用(Feign组件)

ThreadLocal
随机推荐
Add click event to unity 3D object
Game 302 of leetcode
项目管理工具——阿里云Projex介绍与实战
JWT(json web token)
Ping command
obj文件格式与.mtl文件格式
Introduction to base ring tree
初步了解Panda3d粒子系统
LeetCode第302场周赛
typora+PicGo+阿里云OSS 搭建以及报错解决【转载】
[cloud co creation] design Huawei cloud storage architecture with the youngest cloud service hcie (Part 1)
VIM search and replacement and the use of regular expressions
Application of hard coding and streaming integration scheme based on spice protocol in cloud games
TCL shows a number of folding screen mobile phones: the screen and hinge are independently developed!
Microservices and related component concepts
odoo14 | 关于状态栏statusbar关键词使用后显示异常及解决方法
Odoo14 | about the abnormal display of statusbar keyword after use and Its Solutions
ZTE's first 5g mobile phone, axon 10 pro, was launched in the first half of this year
The global shipment of glory 8x series exceeded 10million units, and the glory V20 exceeded 1.5 million units!
LeetCode 15:三数之和










