具有Redis会话的带有嵌入式tomcat 8.5的Spring Boot 2.0和Spring安全性

时间:2019-07-15 11:50:55

标签: java spring-boot spring-security tomcat8 embedded-tomcat-8

伙计们! 我正在使用带有嵌入式tomcat和Redis的Spring boot 2进行分布式会话。 一切运行正常-我已经进行了分布式会话,并且能够进行蓝绿色部署。

问题是当我想跟踪Tomcat accesslog文件中对经过身份验证的用户的每个请求时。当我不使用redis进行会话时,一切正常。

Tomcat可以在从会话获取的日志文件中写入信息。

server.tomcat.accesslog.pattern=%h %l %{username}s %t "%r" %s %b %T %{User-Agent}i

其中%{username} s是会话参数,该值将保存在日志中。 我在春季会议的回调中添加了用户名-

public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response,
                                        Authentication authentication) throws IOException, ServletException {
        String username = merchandiserRepository.findByUsername(authentication.getName()).getUsername();
        request.getSession(true).setAttribute("username", username);
        setUsernameInCookieOnLogin(response, username);
        log.warn("Successfully logged in: {}", username);
        response.sendRedirect("/page/1");
    }

当我调试请求时,我注意到HttpSession sess = request.getSession(false);始终为null(并且存在隐藏的异常)

  

在提交响应后无法创建会话

在文件中-AbstactAccessLogValve-

protected static class SessionAttributeElement implements AbstractAccessLogValve.AccessLogElement {
        private final String header;

        public SessionAttributeElement(String header) {
            this.header = header;
        }

        public void addElement(CharArrayWriter buf, Date date, Request request, Response response, long time) {
            Object value = null;
            if (null != request) {
                HttpSession sess = request.getSession(false);
                if (null != sess) {
                    value = sess.getAttribute(this.header);
                }
            } else {
                value = "??";
            }

            if (value != null) {
                if (value instanceof String) {
                    buf.append((String)value);
                } else {
                    buf.append(value.toString());
                }
            } else {
                buf.append('-');
            }

        }
    }

这意味着我目前没有会话对象(这是不正确的)。 我想这与Servlet过滤器的顺序有关:

2019-07-15 14:49:34.079 DEBUG 17666 --- [nio-8080-exec-2] o.s.s.w.FilterChainProxy                 : /page/1 at position 1 of 12 in additional filter chain; firing Filter: 'WebAsyncManagerIntegrationFilter'
2019-07-15 14:49:34.079 DEBUG 17666 --- [nio-8080-exec-2] o.s.s.w.FilterChainProxy                 : /page/1 at position 2 of 12 in additional filter chain; firing Filter: 'SecurityContextPersistenceFilter'
2019-07-15 14:49:34.084 DEBUG 17666 --- [nio-8080-exec-2] o.s.s.w.FilterChainProxy                 : /page/1 at position 3 of 12 in additional filter chain; firing Filter: 'HeaderWriterFilter'
2019-07-15 14:49:34.084 DEBUG 17666 --- [nio-8080-exec-2] o.s.s.w.FilterChainProxy                 : /page/1 at position 4 of 12 in additional filter chain; firing Filter: 'LogoutFilter'
2019-07-15 14:49:34.084 DEBUG 17666 --- [nio-8080-exec-2] o.s.s.w.FilterChainProxy                 : /page/1 at position 5 of 12 in additional filter chain; firing Filter: 'UsernamePasswordAuthenticationFilter'
2019-07-15 14:49:34.084 DEBUG 17666 --- [nio-8080-exec-2] o.s.s.w.FilterChainProxy                 : /page/1 at position 6 of 12 in additional filter chain; firing Filter: 'RequestCacheAwareFilter'
2019-07-15 14:49:34.084 DEBUG 17666 --- [nio-8080-exec-2] o.s.s.w.FilterChainProxy                 : /page/1 at position 7 of 12 in additional filter chain; firing Filter: 'SecurityContextHolderAwareRequestFilter'
2019-07-15 14:49:34.084 DEBUG 17666 --- [nio-8080-exec-2] o.s.s.w.FilterChainProxy                 : /page/1 at position 8 of 12 in additional filter chain; firing Filter: 'RememberMeAuthenticationFilter'
2019-07-15 14:49:34.085 DEBUG 17666 --- [nio-8080-exec-2] o.s.s.w.FilterChainProxy                 : /page/1 at position 9 of 12 in additional filter chain; firing Filter: 'AnonymousAuthenticationFilter'
2019-07-15 14:49:34.085 DEBUG 17666 --- [nio-8080-exec-2] o.s.s.w.FilterChainProxy                 : /page/1 at position 10 of 12 in additional filter chain; firing Filter: 'SessionManagementFilter'
2019-07-15 14:49:34.085 DEBUG 17666 --- [nio-8080-exec-2] o.s.s.w.FilterChainProxy                 : /page/1 at position 11 of 12 in additional filter chain; firing Filter: 'ExceptionTranslationFilter'
2019-07-15 14:49:34.085 DEBUG 17666 --- [nio-8080-exec-2] o.s.s.w.FilterChainProxy                 : /page/1 at position 12 of 12 in additional filter chain; firing Filter: 'FilterSecurityInterceptor'

有人可以帮助完成这个不容易的任务吗?

最诚挚的问候

0 个答案:

没有答案