SpringSide4不能获取request

我参考网上这个做法
[code="java"]

org.springframework.web.context.request.RequestContextListener

[/code]
[code="java"]
ServletRequestAttributes reqAttr = (ServletRequestAttributes) RequestContextHolder
.getRequestAttributes();
HttpServletRequest request = reqAttr.getRequest();
[/code]
不能获取request,报的是reqAttr的空指针,我是在我的filter里面用的

1个回答

RequestContextListener按理说可以,如下是源码
[code="java"]public class RequestContextListener implements ServletRequestListener {

private static final String REQUEST_ATTRIBUTES_ATTRIBUTE =
        RequestContextListener.class.getName() + ".REQUEST_ATTRIBUTES";


public void requestInitialized(ServletRequestEvent requestEvent) {
    if (!(requestEvent.getServletRequest() instanceof HttpServletRequest)) {
        throw new IllegalArgumentException(
                "Request is not an HttpServletRequest: " + requestEvent.getServletRequest());
    }
    HttpServletRequest request = (HttpServletRequest) requestEvent.getServletRequest();
    ServletRequestAttributes attributes = new ServletRequestAttributes(request);
    request.setAttribute(REQUEST_ATTRIBUTES_ATTRIBUTE, attributes);
    LocaleContextHolder.setLocale(request.getLocale());
    RequestContextHolder.setRequestAttributes(attributes);
}[/code]

你试试request.getAttribute(REQUEST_ATTRIBUTES_ATTRIBUTE);能获取吗?

实在不行试试org.springframework.web.filter.RequestContextFilter。

jinnianshilongnian
jinnianshilongnian HttpServletRequest 只有在用户请求时才创建
接近 8 年之前 回复
jinnianshilongnian
jinnianshilongnian 在容器启动时是无法拿到的,可以考虑这样 1、定义一个全局变量存放当前端口和ip 默认是null 2、实现一个ServletRequestListener 然后实现requestInitialized 当有请求过来时 获取到端口和ip等信息存储到1中的变量 这相当于是一种lazy load 没办法直接获取端口和ip 必须通过HttpServletRequest 才行
接近 8 年之前 回复
kevinpan45
kevinpan45 原来这些信息是配置在web.xml里面给CAS读取的,现在要改成这种获取方式
接近 8 年之前 回复
kevinpan45
kevinpan45 其实我要request的目的是想要拿到项目的IP,端口之类的信息,例如 HttpServletRequest request = getHttpRequest(); String path = request.getContextPath(); String serverName = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort(); String basePath = serverName + path + "/"; 有没有什么其他渠道可以获取这些信息
接近 8 年之前 回复
立即提问
相关内容推荐