Missing session attribute 'user' of type List 解决办法
 @GetMapping("/")
 public String index(@SessionAttribute(WebSecurityConfig.SESSION_KEY) List<Map<String, Object>>  list, Model model) {
            model.addAttribute("boy", list);
            return "index";
 }
像上面这样,获取 session,如果session为空,无法返回模板,会提示
Missing session attribute 'user' of type List 错误
解决方法如下:
用 HttpSession session 代替 @SessionAttribute(WebSecurityConfig.SESSION_KEY) List<Map<String, Object>> list
这个是控制器里面的
 @GetMapping("/")
    public String index(HttpSession session,Model model) {
        Object obj =  session.getAttribute(WebSecurityConfig.SESSION_KEY);
        model.addAttribute("boy", obj);
        System.out.println(WebSecurityConfig.SESSION_KEY);
        return "index";
    }
这样果session为空,也会返回模板,不会出错
templates下的模板 index.html如下:
<ul class="topNav">
            <li th:each="a:${boy}">
                <span th:text="${a.user_id}"></span>
                <span th:text="${a.user_name}"></span>
            </li>
        </ul>
WebSecurityConfig”类如下
package com.example.web; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; @Configuration public class WebSecurityConfig extends WebMvcConfigurerAdapter{ /** * 登录session key */ public final static String SESSION_KEY = "user"; @Bean public SecurityInterceptor getSecurityInterceptor() { return new SecurityInterceptor(); } public void addInterceptors(InterceptorRegistry registry) { InterceptorRegistration addInterceptor = registry.addInterceptor(getSecurityInterceptor()); // 排除配置 //addInterceptor.excludePathPatterns("/error"); addInterceptor.excludePathPatterns("/**"); // 拦截配置 addInterceptor.addPathPatterns("/admin/**"); } private class SecurityInterceptor extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { HttpSession session = request.getSession(); if (session.getAttribute(SESSION_KEY) != null) return true; // 跳转登录 String url = "/login"; response.sendRedirect(url); return false; } } }
登录那边的代码如下:
// 用户登录 public boolean login(String loginname, String password,HttpSession session) { sql = "select * from user where user_name = '" + loginname + "' and password = '" + password + "'"; list = jdbcTemplate.queryForList(sql); if (!list.isEmpty()) { // 设置session session.setAttribute(WebSecurityConfig.SESSION_KEY, list ); System.out.println(WebSecurityConfig.SESSION_KEY); flag = true; } else { flag = false; } return flag; }
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号