springboot整合redis,实现session共享

   一直对serssion的共享有着很大的疑惑,对于我现在的工作的地方,所在的部门,因为没有前台页面,纯属后台。所以,不会存在session的共享问题。但是出于好奇,也是心里的疑惑,今天也动手实验了下。

      我用的spring-boot-starter-redis版本是1.3.8.RELEASE,spring-session-data-redis版本是1.2.1.RELEASE,这个jar包主要是为了实现session共享做准备。

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-redis</artifactId>
            <version>${redis.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-data-redis</artifactId>
            <version>1.2.1.RELEASE</version>
        </dependency>


添加application.properties文件


#tomcat地址
server.port=8084
#redis地址
spring.redis.host=192.168.8.128
spring.redis.port=6379
spring.redis.timeout=20000


添加InitConfig类,读取对应的application.properties

@Configuration
@PropertySource({
        "classpath:application.properties"
})
public class InitConfig {
    @Bean
    public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
        PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer = new PropertySourcesPlaceholderConfigurer();
        propertySourcesPlaceholderConfigurer.setLocations(new ClassPathResource("/application.properties"));
        return propertySourcesPlaceholderConfigurer;
    }
}


添加WebConfig类,配置springmvc

@Configuration
@EnableWebMvc
@ComponentScan(basePackages={"com.zd.testdata.web.controller"},useDefaultFilters = false, includeFilters = @ComponentScan.Filter(value = {Controller.class, ControllerAdvice.class}))
public class WebConfig extends WebMvcConfigurerAdapter {
    @Autowired
    private ObjectMapper objectMapper;
 
    @Bean
    public FilterRegistrationBean characterEncodingFilterRegistrationBean() {
        FilterRegistrationBean registrationBean = new FilterRegistrationBean();
        CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
        characterEncodingFilter.setEncoding("UTF-8");
        characterEncodingFilter.setForceEncoding(true);
        registrationBean.setFilter(characterEncodingFilter);
        registrationBean.addUrlPatterns("/*");
        return registrationBean;
    }
 
    @Bean
    public ServletRegistrationBean mvcDispatcherRegistration() {
        DispatcherServlet dispatcherServlet = new DispatcherServlet();
 
        AnnotationConfigWebApplicationContext applicationContext = new AnnotationConfigWebApplicationContext();
        dispatcherServlet.setApplicationContext(applicationContext);
 
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(dispatcherServlet, "/");
        servletRegistrationBean.setName("springMvc");
        return servletRegistrationBean;
    }
    protected MappingJackson2HttpMessageConverter customJackson2HttpMessageConverter() {
        MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter();
        jsonConverter.setObjectMapper(objectMapper);
        return jsonConverter;
    }
 
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        converters.add(customJackson2HttpMessageConverter());
        converters.add(new StringHttpMessageConverter());
    }
 
    @Override
    public void addFormatters(FormatterRegistry registry) {
        super.addFormatters(registry);
 
 
        DateFormatter dateFormatter = new DateFormatter("yyyy-MM-dd HH:mm:ss");
        dateFormatter.setLenient(true);
        registry.addFormatter(dateFormatter);
    }
}


添加controller
@RestController
@RequestMapping(value = "/admin/v1")
public class RedisController {
    @RequestMapping(value = "/first", method = RequestMethod.GET)
    public Map<String, Object> firstResp (HttpServletRequest request){
        Map<String, Object> map = new HashMap<String,Object>();
        request.getSession().setAttribute("request Url", request.getRequestURL());  
        map.put("request Url", request.getRequestURL());  
        return map;  
    }  
  
    @RequestMapping(value = "/sessions", method = RequestMethod.GET)  
    public Object sessions (HttpServletRequest request){  
        Map<String, Object> map = new HashMap<String,Object>();
        map.put("sessionId", request.getSession().getId());  
        map.put("message", request.getSession().getAttribute("map"));  
        return map;  
    }  
}  


启动两份项目的tomcat,端口分别是8081和8084,访问

       http://localhost:8081/admin/v1/sessions

       http://localhost:8084/admin/v1/sessions

返回均是

       {"sessionId":"894ed7c3-45a6-4437-a539-51a7ba946992","message":null}

      至此,通过redis共享session就此结束。很简短。也只是实现了,欢迎大家斧正。

猜你喜欢

转载自my.oschina.net/u/200350/blog/2962260