session获取不到登录用户

session获取不到登录用户

package com.liu.mall.filter;

import com.liu.mall.common.Constant;
import com.liu.mall.model.pojo.User;
import org.springframework.context.annotation.Configuration;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
import java.io.IOException;
import java.io.PrintWriter;

public class UserFilter implements Filter {
    //过滤器拦截到登录的信息并进行保存,以后就可以从过滤器中提取用户
    public static User loginUser;

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
       //防止乱码
        servletResponse.setContentType("text/html;charset=utf-8");
        servletResponse.setCharacterEncoding("utf-8");

        //得到登录的用户
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        loginUser = (User) request.getSession().getAttribute(Constant.USER);
        //校验
        if (loginUser == null) {
            //HttpServletResponseWrapper是对HttpServletResponse的包装。可以在请求响应前对拦截响应,进行处理等。
            //所以HttpServletResponseWrapper更加适合配合过滤器使用
            PrintWriter out = new HttpServletResponseWrapper(((HttpServletResponse) servletResponse)).getWriter();
            out.write("{    \"status\": 10007,    \"msg\": \"您还没有登录!\",    \"data\": null}");
            out.flush();
            out.close();
            return;
        }
        filterChain.doFilter(servletRequest, servletResponse);
    }

    @Override
    public void destroy() {

    }
}
package com.liu.mall.config;

import com.liu.mall.filter.UserFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

//配置校验用户的过滤器
@Configuration
public class UserFilterConfig {

    /**
     * 配置过滤器的两部:
     * 1.定义这个过滤器
     * 2.配置过滤器
     * @return
     */
        @Bean
        public UserFilter userFilter() {
            return new UserFilter();
        }

        @Bean(name = "userFilterConf")//这个名字,不要和类名相同,不然bean就分不清了
        public FilterRegistrationBean adminFilterConfig() {
            FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
            //添加过滤器
            filterRegistrationBean.setFilter(userFilter());
            //设置过滤path
            filterRegistrationBean.addUrlPatterns("/user/*");
            filterRegistrationBean.addUrlPatterns("/cart/*");
            filterRegistrationBean.addUrlPatterns("/order/*");
//            设置名字
            filterRegistrationBean.setName("userFilterConf");
            return filterRegistrationBean;
    }
}
/**
 * 登录
 */
@PostMapping("/login")
@ResponseBody
public ApiResponse login(String userName, String password, HttpSession session) throws MallException {
    //验证为空
    if (StringUtils.isEmpty(userName) || StringUtils.isEmpty(password)) {
        return ApiResponse.error(ExceptionEum.NAME_PASSWORD_NOT_NULL);
    }
    User user = userService.login(userName, password);
    user.setPassword(null);
    session.setAttribute(Constant.USER, user);
    return ApiResponse.success(user);
}

过滤器中通过session得不到用户

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小尤 2022-02-14 10:09:05

同学你好,查看同学代码是没有问题的,则建议同学在login()方法中查看是否有成功登陆,并将user信息添加到session中。

祝学习愉快!

  • 提问者 Java小彩鸡 #1

    login方法返回是成功的,而且在调试的时候也是在session里的

    2022-02-14 16:41:31
  • 好帮手慕小尤 回复 提问者 Java小彩鸡 #2

    同学你好,1、建议去除过滤user的代码。如下所示:

    https://img1.sycdn.imooc.com//climg/620a229709ca949708380298.jpg

    2、建议同学删除target目录,然后清除缓存试一下,如下所示:

    https://img1.sycdn.imooc.com//climg/620a2e410935611e02350147.jpg

    3、如果还存在该问题,则建议同学使用课程源码试一下。

    祝学习愉快!

    2022-02-14 18:30:52
  • 星岳神话 回复 提问者 Java小彩鸡 #3

    今天碰到和你同样的问题。 登录是时候使用localhost, 访问的时候 使用127.0.0.1。    同步一下地址就可以了。

    2022-03-17 20:24:32
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师