【问题标题】:Persist Spring Session without Spring Security在没有 Spring Security 的情况下保持 Spring Session
【发布时间】:2016-05-20 20:09:27
【问题描述】:

我正在寻求帮助来配置 Spring Boot 以在不使用 Spring Security 的情况下保持 Spring Session。

我从 HttpSession JDBC Spring Boot sample app 开始,为 Spring Boot 应用程序保留一个 Spring Session。但是,这使用 Spring Security。删除 Spring Security 时,会话将停止在 H2 数据库中持久化。 XML configJava config 示例应用程序不使用 Spring Security。因此,不是要求。

guide 声明 springSessionRepositoryFilter 将创建 Spring Session。但是,在删除 Spring Security 并调试此过滤器 (SessionRepositoryFilter) 后,传递给 SessionRepositoryFilter$SessionRepositoryRequestWrapper.getSession(boolean) 的布尔值永远不会设置为 true。因此,Spring Session 永远不会被创建和持久化。

对于在没有 Spring Security 的情况下为 Spring Boot 应用持久化 Spring Session 所需的额外配置有何建议?

这里是相关的类,pom.xml,和application.property文件:

@SpringBootApplication
public class SbWebSessionJdbcApplication {

    public static void main(String[] args) {
        SpringApplication.run(SbWebSessionJdbcApplication.class, args);
    }
}

@EnableJdbcHttpSession 
public class HttpSessionConfig {
}

pom.xml

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.3.5.RELEASE</version>
    <relativePath/>
</parent>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.version>1.8</java.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.session</groupId>
        <artifactId>spring-session-jdbc</artifactId>
        <version>1.2.0.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.session</groupId>
        <artifactId>spring-session</artifactId>
        <version>1.2.0.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>

    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

application.properties

spring.thymeleaf.cache=false
spring.template.cache=false
spring.datasource.schema=classpath:org/springframework/session/jdbc/schema-h2.sql
spring.h2.console.enabled=true
logging.level.org.springframework.web=DEBUG

【问题讨论】:

    标签: spring-boot spring-jdbc spring-session


    【解决方案1】:

    实际上,您不需要特别配置任何东西 - 您只需启动 HttpSession 的创建并根据您的需要使用它。例如,实现这一点的最简单方法是使用带有 HttpSession 作为参数的 Spring MVC 控制器方法。

    查看this repo on Github,尤其是basic-jdbc 模块。这正是您正在寻找的示例 - 带有 Spring Session 但没有 Spring Security 的 Spring Boot 应用程序。

    【讨论】:

      猜你喜欢
      • 2015-04-13
      • 2011-09-16
      • 2015-03-30
      • 2020-10-27
      • 2022-06-13
      • 1970-01-01
      • 2014-09-15
      • 2019-10-15
      • 2020-01-21
      相关资源
      最近更新 更多