当前位置:网站首页>50:第五章:开发admin管理服务:3:开发【查询admin用户名是否已存在,接口】;(这个接口需要登录时才能调用;所以我们编写了拦截器,让其拦截请求,判断用户是否是登录状态;)

50:第五章:开发admin管理服务:3:开发【查询admin用户名是否已存在,接口】;(这个接口需要登录时才能调用;所以我们编写了拦截器,让其拦截请求,判断用户是否是登录状态;)

2022-07-25 05:27:00 小枯林

说明:

(1)本篇博客内容:开发【查询admin用户名是否已存在,接口】;

目录

一:开发【查询admin用户名是否已存在,接口】;

0.合理性说明; 

1.在【api】接口工程的AdminMngControllerApi接口中,定义【查询admin用户名是否已存在,接口】;

2.在【admin】管理服务的AdminMngController类中,去实现【查询admin用户名是否已存在,接口】;

3.测试;

4.【查询admin用户名是否已存在,接口】,也是需要用户在登录的时候,才能够操作的;

(1)首先,在【api】接口工程中,创建AdminTokenInterceptor拦截器,去拦截请求,根据请求判断用户是登录状态;

(2)然后,在【api】接口工程中,在InterceptorConfig类,去配置AdminTokenInterceptor拦截器;

(3)效果;


一:开发【查询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信息,让其不再是登录状态;

原网站

版权声明
本文为[小枯林]所创,转载请带上原文链接,感谢
https://wgy-coder.blog.csdn.net/article/details/125966988