当前位置: 首页 > 知识库问答 >
问题:

如何在控制器方法之前获取HttpServletRequest

翟淮晨
2023-03-14

我正在开发一个Spring应用程序,并在HandlerInterceptorAdapter的预处理()方法中对用户进行身份验证,如果用户进行了身份验证,我将如下设置请求属性:

@Override
public boolean preHandle(HttpServletRequest request, 
                         HttpServletResponse response, 
                         Object handler) throws Exception {  

    request.setAttribute("isAuthenticated",true);
    request.setAttribute("user",user);    
}

如果用户未通过身份验证,我是这样设置的

@Override
public boolean preHandle(HttpServletRequest request, 
                         HttpServletResponse response, 
                         Object handler) throws Exception {

    request.setAttribute("isAuthenticated",false);
    request.setAttribute("user",null);        
}

然后在稍后的控制器方法中,我用HttpServletRequest检索用户,如下所示:

@GetMapping(value = "/user", produces = "application/json")
public Object getUserByToken(HttpServletRequest request) {

    if((Boolean) request.getAttribute("isAuthenticated")) {
        return request.getAttribute("user");
    }

    return ResponseEntity.status(UNAUTHORIZED).body("unauthorized");       
}

问题是我需要在每个控制器方法中接收HttpServletRequest,以检查用户是否经过身份验证。

我想要的是在控制器方法之前和控制器类内部调用的方法,以便我可以在一个位置设置用户,并从所有其他控制器方法中获取

共有1个答案

长孙骏
2023-03-14

这样编写基本控制器:

public class BaseController {

    @ModelAttribute("user")
    public User getUser(HttpServletRequest request) {
        return (User)request.getAttribute("user");
    }
}

从基本控制器扩展所有控制器。

@RequestMapping(value = "/user", produces = "application/json")
public Object getUserByToken(@ModelAttribute("user") User user) {
   // play with user object
}

我已经向您展示了用户的示例,同样用于身份验证标志。

 类似资料:
  • 本文向大家介绍iOS如何获取当前View所在控制器的方法,包括了iOS如何获取当前View所在控制器的方法的使用技巧和注意事项,需要的朋友参考一下 前言 不知道大家有没有遇到过在做轮播图的时候,有点轮播图展示的是广告,有的是活动,等等还有其他的,当前点击某个轮播的时候要跳转到不同的控制器,点击事件是在控制器写的,为了避免控制器代码过多,显示的臃肿。我创建了一个UIWindow的分类,暂且叫Mode

  • 如果运行在负载均衡器之后,最好应该理解头。因此,在本例中,我想让类似于。如果需要的话,我将使用Netty服务器实现。

  • 在spring boot中@RequestBody内容到达控制器之前,我如何覆盖它? > 此外,我还搜索了Request estBodyAdviceAdapter。 有几个链接对spring boot不起作用。 如何多次读取request.getInputStream() 如何在Spring引导到达控制器之前修改请求正文 现在,我可以将输入流读入字符串中,进行一些修改并设置回控制器的输入流吗?

  • 我正在使用Spring MVC 4.1为restful Web服务添加速率限制。 我创建了一个注释,可以应用于控制器方法。Spring AOP方面会拦截对这些方法的调用,并在请求过多时引发异常: 这一切都非常有效,除非控制器方法的参数标记为,例如: 问题:如果验证失败,验证器会抛出由@ExceptionHandler处理的,它会向客户端返回错误响应,永远不会触发我的,因此绕过速率限制。 如何以优先

  • 问题内容: 我有一个externalItems列表。在每个externalItem内,我都有一个innerItems列表。它们是动态排序的。 当鼠标光标指向innerItems之一时,我必须在该innerItem元素上方显示弹出窗口。 Popup div是body的孩子,因为我不想为innerItems的每个单独创建一个弹出窗口。 我所看到的方式—在我调用的函数中,将左/上属性设置为绝对定位的弹出

  • 问题内容: 为什么无法从另一个内部访问其他控制器方法呢? 像这样。 已编译 如果您不能这样做,那为什么不呢?我还应该怎么做… 问题答案: 最近几个小时遇到相同的问题。我使用了api / services文件夹。它可能不完全是您所需要的,但是它是一个选择。