mvc启动报错(baseController注入的request是null)

自己学习spingboot,搭建的mvc项目,我的想法是:
登录的时候保存loginUser,然后在BaseController获取loginUser,所有的controller继承BaseController,这样在其他的controller中就可以直接使用loginUser。
现在项目启动报错,request是null,
希望帮忙看一下我这么写是有什么问题?或者有没有别的办法可以实现我想要的结果

public class BaseController {

    private static Logger log = LoggerFactory.getLogger(BaseController.class);

    @Autowired(required = false)
    private HttpServletRequest request;

    public  LoginUser loginUser = (LoginUser) request.getSession().getAttribute("loginUser");


    public void  saveLoginUserInBase(LoginUser loginUser){
        request.getSession().setAttribute("loginUser",loginUser);
    }
}

3个回答

request是存在你controller里的方法里的参数的,例如

public void  saveLoginUserInBase(HttpServletRequest request, LoginUser loginUser){
        request.getSession().setAttribute("loginUser",loginUser);
    }

正常只要你的controller使用@Controller注解后,你的每个方法里都存在request和response(HttpServletResponse)

HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder .getRequestAttributes()).getRequest();
tiankongzhichenglyf
tkzc_shark 回复WarcraftZS: 不用,springboot配置类中设置就行了
6 个月之前 回复
WarcraftZS
WarcraftZS 回复tkzc_shark: 用的springboot,所以没有用到web.xml文件,是需要加web.xml吗
6 个月之前 回复
tiankongzhichenglyf
tkzc_shark 回复WarcraftZS: <listener> <listener-class>org.springframework.web.context.request.RequestContextListener </listener-class> </listener>
6 个月之前 回复
tiankongzhichenglyf
tkzc_shark 回复WarcraftZS: web.xml中是不是没有配置监听
6 个月之前 回复
WarcraftZS
WarcraftZS 试了一下,不行的 启动报错,还是空指针
6 个月之前 回复
import javax.servlet.http.HttpServletRequest;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

public class BaseController {
    private final static String LOGIN_USER = "loginUser";
    private static Logger log = LoggerFactory.getLogger(BaseController.class);

    public static LoginUser getLoginUserInBase() {
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
                .getRequest();
        return (LoginUser) request.getAttribute(LOGIN_USER);
    }
    public static void saveLoginUserInBase(LoginUser loginUser) {
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
                .getRequest();
        request.getSession().setAttribute(LOGIN_USER, loginUser);
    }
}

你试下这个代码,不过不建议这样的封装,springboot可以用aop或者filter或者intercepter直接进行处理,如果没有获取到就跳转到登录页面。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问