Spring Session - Spring Boot Redis

可以先看一下這個官方的文檔

http://docs.spring.io/spring-session/docs/current/reference/html5/guides/boot.html


application.properties中的配置

# REDIS (RedisProperties)
spring.redis.database=4
spring.redis.host=127.0.0.1
spring.redis.port=7001
spring.redis.password=123456
spring.redis.pool.maxActive=8
spring.redis.pool.maxIdle=8
spring.redis.pool.maxWait=-1
spring.redis.pool.minIdle=0
spring.redis.timeout=0

讀取屬性文件用的

import org.springframework.boot.context.properties.ConfigurationProperties;

@ConfigurationProperties(prefix = "spring.redis")
public class RedisProperties {

    private String database;

    private String host;

    private String password;

    private String maxActive;

    private String maxWait;

    private String maxIdle;

    private String minIdle;

    private String port;

    private String timeout;

    public String getDatabase() {
        return database;
    }

    public void setDatabase(String database) {
        this.database = database;
    }

    public String getHost() {
        return host;
    }

    public void setHost(String host) {
        this.host = host;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getMaxActive() {
        return maxActive;
    }

    public void setMaxActive(String maxActive) {
        this.maxActive = maxActive;
    }

    public String getMaxWait() {
        return maxWait;
    }

    public void setMaxWait(String maxWait) {
        this.maxWait = maxWait;
    }

    public String getMaxIdle() {
        return maxIdle;
    }

    public void setMaxIdle(String maxIdle) {
        this.maxIdle = maxIdle;
    }

    public String getMinIdle() {
        return minIdle;
    }

    public void setMinIdle(String minIdle) {
        this.minIdle = minIdle;
    }

    public String getPort() {
        return port;
    }

    public void setPort(String port) {
        this.port = port;
    }

    public String getTimeout() {
        return timeout;
    }

    public void setTimeout(String timeout) {
        this.timeout = timeout;
    }
}

配置文件

import org.apache.commons.lang3.StringUtils;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.session.data.redis.RedisOperationsSessionRepository;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;

@Configuration
@EnableRedisHttpSession
public class RedisSessionConfigurer {

    /**
     * 加載屬性文件數據
     *
     * @return
     */
    @Bean
    public RedisProperties redisProperties() {
        return new RedisProperties();
    }

    /**
     * 設置redisTemplate的存儲格式(在此與Session沒有什麼關係)
     *
     * @return
     */
    @Bean
    @SuppressWarnings("rawtypes")
    public RedisSerializer shrioRedisRedisSerializer() {
        return new FastJson2JsonRedisSerializer<Object>(Object.class);
    }

    /**
     * 與Session有關設置鏈接
     *
     * @return
     */
    @Bean
    public RedisOperationsSessionRepository sessionRepository() {
        RedisOperationsSessionRepository sessionRepository = new RedisOperationsSessionRepository(connectionFactory());
        sessionRepository.setDefaultMaxInactiveInterval(60);// 設置session的有效時長
        return sessionRepository;
    }

    /**
     * Redis連接客戶端
     *
     * @return
     */
    @Bean(name = "connectionFactory")
    public RedisConnectionFactory connectionFactory() {
        JedisConnectionFactory conn = new JedisConnectionFactory();
        if (StringUtils.isNotEmpty(redisProperties().getDatabase())) {
            conn.setDatabase(Integer.valueOf(redisProperties().getDatabase()));
        }
        conn.setHostName(redisProperties().getHost());
        conn.setPort(Integer.valueOf(redisProperties().getPort()));
        conn.setTimeout(Integer.valueOf(redisProperties().getTimeout()));
        return conn;
    }


    /**
     * RedisTemplate
     *
     * @return
     */
    @Bean(name = "redisTemplate")
    public RedisTemplate<String, Object> redisTemplate() {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(connectionFactory());
        RedisSerializer stringSerializer = new StringRedisSerializer();
        template.setKeySerializer(stringSerializer);
        template.setValueSerializer(shrioRedisRedisSerializer());
        template.setHashKeySerializer(stringSerializer);
        template.setHashValueSerializer(shrioRedisRedisSerializer());
        template.afterPropertiesSet();
        return template;
    }



如果和shiro集成的話

ShiroConfigurer.java修改的地方

    /**
     * DefaultWebSessionManager
     *
     * @return
     */
    @Bean(name = "sessionManager")
    public ServletContainerSessionManager sessionManager() {
        ServletContainerSessionManager sessionManager = new ServletContainerSessionManager();
        return sessionManager;
    }

    /**
     * 權限管理器
     *
     * @return
     */
    @Bean
    public DefaultWebSecurityManager securityManager() {
        DefaultWebSecurityManager manager = new DefaultWebSecurityManager();
        // 數據庫認證的實現
        manager.setRealm(userCenterRealm());
        // session 管理器
        manager.setSessionManager(sessionManager());
        // 緩存管理器
        manager.setCacheManager(shiroCacheManager());
        return manager;
    }



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章