您的位置:首页 > 数据库 > Redis

springboot整合redis,实现session共享

2016-10-29 17:04 1061 查看
       一直对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就此结束。很简短。也只是实现了,欢迎大家斧正。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  redis session