首页 > 其他分享 >自定义注解获取当前登录信息

自定义注解获取当前登录信息

时间:2023-04-23 15:44:28浏览次数:30  
标签:自定义 登录 request token ReUser user 注解 public zhourui

登录注解

/**
 * @author zhourui
 * @date 2023/4/18 9:39
 */

import java.lang.annotation.*;

/**
 * @author zhourui
 * @date 2023/4/17 14:42
 */
@Documented
@Target(ElementType.METHOD)
@Retention(value = RetentionPolicy.RUNTIME)
public @interface ReLogin
{
}

获取用户信息注解

package com.zjfc.sys.oauth2;

import java.lang.annotation.*;

/**
 * @author zhourui
 * @date 2023/4/17 14:42
 */
@Documented
@Target({ElementType.PARAMETER})
@Retention(value = RetentionPolicy.RUNTIME)
public @interface ReUser
{
    String key() default "ReUser";
}

登录解析器

/**
 * 登录解析器
 *
 * @author zhourui
 * @date 2023/4/17 14:39
 */
@Component
public class ReLoginResolver implements HandlerMethodArgumentResolver
{
    @Override
    public boolean supportsParameter(MethodParameter parameter)
    {
        if (parameter.hasParameterAnnotation(ReUser.class))
        {
            return true;
        }
        return false;
    }

    @Override
    public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer modelAndViewContainer, NativeWebRequest request, WebDataBinderFactory webDataBinderFactory) throws MissingServletRequestPartException
    {
        ReUser reUser = parameter.getParameterAnnotation(ReUser.class);
        SysUserEntity user = (SysUserEntity) request.getAttribute(Objects.requireNonNull(reUser)
                .key(), RequestAttributes.SCOPE_REQUEST);
        if (user != null)
        {
            return user;
        }
        throw new MissingServletRequestPartException("userBean is null");
    }
}

 

拦截器配置

/**
 * 拦截器配置
 *
 * @author zhourui
 * @date 2023/4/17 14:42
 */
@Log4j2
@Component
public class ReHandlerInterceptor implements HandlerInterceptor
{
    @Autowired
    private ShiroService shiroService;

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
    {
        HandlerMethod handlerMethod = (HandlerMethod) handler;
        ReLogin reLogin = AnnotationUtils.findAnnotation(handlerMethod.getMethod(), ReLogin.class);
        if (reLogin != null)
        {
            // 获取令牌信息
            String token = request.getHeader("token");

            log.info("当前传递的token为: {}", token);

            if (StrUtil.isBlank(token))
            {
                throw new RRException("提示: 请求方法未传token!");
            }

            // 查询用户信息
            SysUserTokenEntity sysUser = shiroService.queryByToken(token);
            if (sysUser == null)
            {
                throw new RRException("提示: 令牌无效,无效token!");
            }

            SysUserEntity user = shiroService.queryUser(sysUser.getUserId());

            log.info("用户信息: {}", JSON.toJSONString(user));

            Optional.ofNullable(user).ifPresent(item -> request.setAttribute("ReUser", item));
        }

        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
    {
        response.addHeader("x-frame-options", "SAMEORIGIN");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
    {

    }
}

 使用:

 

 

标签:自定义,登录,request,token,ReUser,user,注解,public,zhourui
From: https://www.cnblogs.com/zrboke/p/17346733.html

相关文章

  • Vue 3.0自定义指令
    Vue2和Vue3在自定义指令上有一些差异,并不完全一致,下面的介绍主要是针对Vue3的介绍。1.作用域自定义指令有两种作用域,一种是局部的自定义指令,还有一种是全局的自定义指令。局部的自定义指令就只能在当前.vue文件中使用,全局的则可以在main.js里挂载之后,在所有的.vue文件......
  • shell自定义函数
    函数调用通常将函数看成是脚本中的一段代码,在使用函数前必须先定义该函数,使用时利用函数名直接调用。例:编写脚本func_script,内容如下。#!/bin/bashREPEAT=3fa(){echo"Nowfafunctionisstarting..."echo}fb(){i=0echo"Andnowthefbbebins."sleep......
  • 从数据库查询权限信息、自定义失败处理
    从数据库查询权限信息我们只需要根据用户id去查询到其所对应的权限信息即可。所以我们可以先定义个mapper,其中提供一个方法可以根据userid查询权限信息。MenuMapper持久层接口publicinterfaceMenuMapperextendsBaseMapper<Menu>{List<String>selectPermsByUser......
  • Spring 通过注解配置bean
    微信公众号:测试加油站关注可了解更多的测试开发技术。问题或建议,请公众号留言;如果你觉得文章对你有帮助,欢迎转发[1]Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置。Spring的java配置是通过这两个注解实现的,@Configuration和@Bean@Configuration作用到类上,相当一个xml......
  • nginx自定义负载均衡及根据cpu运行自定义负载均衡
    1.nginx如何自定义负载均衡在Nginx中,可以通过配置文件自定义负载均衡策略。具体步骤如下:首先,在Nginx配置文件中定义一个upstream模块,并设置负载均衡策略和后端服务器列表,例如:upstreammyapp{serverbackend1.example.comweight=3;serverbackend2.example.com;se......
  • 在命令行中直接使用密码 ssh 登录
    在命令行中直接使用密码ssh登录问题需要在shell脚本中ssh登录远程服务器,上传下载文件,但由于ssh直接使用TTY访问,需要确保密码是用户键盘输入的,每次都需要输入密码,又没有添加免密登录,所以需要在脚本中直接使用密码执行操作。解决方案使用sshpass库,sshpass在专门的......
  • node-red 在功能模块下自定义节点
    在目录下node-red\packages\node_modules\@node-red\nodes\core\function下创建compare.js和compare.html demo.js demo.html确保 data-template-name与RED.nodes.registerType的名称要一致 然后npmrunstart就可以看到 注:https://blog.csdn.net/wmjjjj/artic......
  • sdl2实现简单的登录页面
    #include<SDL.h>#include<SDL_ttf.h>#include<iostream>#include<string>intmain(intargc,char*args[]){  if(SDL_Init(SDL_INIT_VIDEO)<0)  {    std::cerr<<"SDL初始化失败,错误信息:"<<SDL_GetError()&l......
  • spring mvc注解基本配置
    1.1. 配置web.xml<?xmlversion="1.0"encoding="UTF-8"?><web-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xm......
  • Spring缓存注解的使用与源码分析
    SpringCache提供了一个对缓存使用的抽象,以及大量的实现方便开发者使用。SpringCache主要提供了如下注解:注解说明@Cacheable根据方法的请求参数对其结果进行缓存@CachePut根据方法的请求参数对其结果进行缓存,和@Cacheable不同的是,它每次都会触发真实方法的调用@CacheEvict根据一定......