WebAppConfiguration.java 3.86 KB
package com.bsth;

import com.bsth.filter.ResourceFilter;
import com.bsth.listener.UserLogoutSessionListener;
import com.bsth.websocket.WebSocketHandshakeInterceptor;
import com.bsth.websocket.handler.RealControlSocketHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.context.embedded.FilterRegistrationBean;
import org.springframework.boot.context.embedded.ServletListenerRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.filter.HttpPutFormContentFilter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
import org.springframework.web.socket.server.standard.ServletServerContainerFactoryBean;

import javax.servlet.Filter;

@Configuration
@EnableWebSocket
@ComponentScan
public class WebAppConfiguration extends WebMvcConfigurerAdapter implements WebSocketConfigurer{
	
//	@Autowired
//	HttpOpLogInterceptor httpOpLogInterceptor;

	Logger logger = LoggerFactory.getLogger(this.getClass());
	
	/**
	 * @Title: httpPutFormContentFilter 
	 * @Description: TODO(弥补浏览器不支持PUT/DELETE,对携带 _method 参数的请求进行转换) 
	 */
	@Bean
	public Filter httpPutFormContentFilter() {
		return new HttpPutFormContentFilter();
	}
	
	/**
	 * @Title: characterEncodingFilter 
	 * @Description: TODO(编码过滤器) 
	 */
	@Bean
	public Filter characterEncodingFilter(){
		return new CharacterEncodingFilter("UTF-8");
	}
	
	/**
	 * 
	 * @Title: resourceFilterRegistration 
	 * @Description: TODO(静态资源过滤器, 只处理 /pages 目录下的片段请求 ) 
	*/
	@Bean
	public FilterRegistrationBean resourceFilterRegistration(){
		FilterRegistrationBean registration = new FilterRegistrationBean();
		registration.setFilter(new ResourceFilter());
		registration.addUrlPatterns("/pages/*");
		return registration;
	}
	
	/**
	 * 
	 * @Title: addInterceptors 
	 * @Description: TODO(HTTP结构化访问日志记录 ) 
	
	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		registry.addInterceptor(httpOpLogInterceptor);
	}*/
	
	@Override
	public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
		//线调webSocket
		registry.addHandler(new RealControlSocketHandler(), "/sockjs/realcontrol").addInterceptors(new WebSocketHandshakeInterceptor())
        	.withSockJS();
	}

	/**
	 * 增加websocket的输出缓冲区
	 * @return
	 */
	@Bean
	public ServletServerContainerFactoryBean createServletServerContainerFactoryBean() {
		ServletServerContainerFactoryBean container = new ServletServerContainerFactoryBean();
		container.setMaxTextMessageBufferSize(52768);
		container.setMaxBinaryMessageBufferSize(52768);
		logger.info("Websocket factory returned");
		return container;
	}

	//--------------------- 配置listener ---------------------//
    @Bean
    public ServletListenerRegistrationBean<UserLogoutSessionListener> UserLogoutSessionListenerRegistrationBean() {
        ServletListenerRegistrationBean<UserLogoutSessionListener> userLogoutSessionListenerRegistrationBean =
                new ServletListenerRegistrationBean<>();
        userLogoutSessionListenerRegistrationBean.setListener(userLogoutSessionListenerBean());
        return userLogoutSessionListenerRegistrationBean;
    }
    @Bean
    public UserLogoutSessionListener userLogoutSessionListenerBean() {
	    return new UserLogoutSessionListener();
    }
}