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就此结束。很简短。也只是实现了,欢迎大家斧正。







  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值