wei.zhang2 2017-10-13 17:54:21 +08:00
parent cb9f4f3a68
commit 5111319d21
9 changed files with 452 additions and 2 deletions

View File

@ -0,0 +1,28 @@
package com.boot.security.server.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.task.TaskExecutor;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
/**
* 线
*
* @author
*
* 2017819
*/
@EnableAsync(proxyTargetClass = true)
@Configuration
public class AsycTaskExecutorConfig {
@Bean
public TaskExecutor taskExecutor() {
ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
taskExecutor.setCorePoolSize(50);
taskExecutor.setMaxPoolSize(100);
return taskExecutor;
}
}

View File

@ -0,0 +1,116 @@
package com.boot.security.server.config;
import java.sql.SQLException;
import javax.sql.DataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
/**
* Druid
*
* @author
*
*/
@Slf4j(topic = "adminLogger")
@Configuration
public class DruidConfig {
@Bean
public ServletRegistrationBean druidServlet() {
log.info("init Druid Servlet Configuration ");
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(),
"/druid/*");
// IP白名单
servletRegistrationBean.addInitParameter("allow", "127.0.0.1");
// IP黑名单(共同存在时deny优先于allow)
// servletRegistrationBean.addInitParameter("deny", "192.168.27.26");
// // 控制台管理用户
// servletRegistrationBean.addInitParameter("loginUsername", "admin");
// servletRegistrationBean.addInitParameter("loginPassword", "admin");
// // 是否能够重置数据 禁用HTML页面上的“Reset All”功能
// servletRegistrationBean.addInitParameter("resetEnable", "false");
return servletRegistrationBean;
}
@Bean
public FilterRegistrationBean filterRegistrationBean() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
filterRegistrationBean.addUrlPatterns("/*");
filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
return filterRegistrationBean;
}
/**
*
*
* @author
*
*/
@ConfigurationProperties(prefix = "spring.datasource")
@Getter
@Setter
class DataSourceProperties {
private String url;
private String username;
private String password;
private String driverClassName;
private int initialSize;
private int minIdle;
private int maxActive;
private int maxWait;
private int timeBetweenEvictionRunsMillis;
private int minEvictableIdleTimeMillis;
private String validationQuery;
private boolean testWhileIdle;
private boolean testOnBorrow;
private boolean testOnReturn;
private boolean poolPreparedStatements;
private int maxPoolPreparedStatementPerConnectionSize;
private String filters;
private String connectionProperties;
@Bean
@Primary
public DataSource dataSource() {
DruidDataSource datasource = new DruidDataSource();
datasource.setUrl(url);
datasource.setUsername(username);
datasource.setPassword(password);
datasource.setDriverClassName(driverClassName);
datasource.setInitialSize(initialSize);
datasource.setMinIdle(minIdle);
datasource.setMaxActive(maxActive);
datasource.setMaxWait(maxWait);
datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
datasource.setValidationQuery(validationQuery);
datasource.setTestWhileIdle(testWhileIdle);
datasource.setTestOnBorrow(testOnBorrow);
datasource.setTestOnReturn(testOnReturn);
datasource.setPoolPreparedStatements(poolPreparedStatements);
datasource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);
try {
datasource.setFilters(filters);
} catch (SQLException e) {
log.error("异常", e);
}
datasource.setConnectionProperties(connectionProperties);
return datasource;
}
}
}

View File

@ -20,8 +20,8 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().antMatchers("/css/**", "/fonts/**", "/img/**", "/js/**", "/layui/**").permitAll()
.anyRequest().authenticated().and().formLogin().loginProcessingUrl("/login")
http.authorizeRequests().antMatchers("/css/**", "/fonts/**", "/img/**", "/js/**", "/layui/**", "/files/*")
.permitAll().anyRequest().authenticated().and().formLogin().loginProcessingUrl("/login")
.successHandler(authenticationSuccessHandler).failureHandler(authenticationFailureHandler).and()
.logout().logoutUrl("/logout").logoutSuccessHandler(logoutSuccessHandler);
}

View File

@ -0,0 +1,31 @@
package com.boot.security.server.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
/**
* swagger
*
* @author
*
* 2017721
*/
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket docket() {
return new Docket(DocumentationType.SWAGGER_2).groupName("swagger接口文档")
.apiInfo(new ApiInfoBuilder().title("swagger接口文档")
.contact(new Contact("小威老师", "", "xiaoweijiagou@163.com")).version("1.0").build())
.select().paths(PathSelectors.any()).build();
}
}

View File

@ -0,0 +1,66 @@
package com.boot.security.server.config;
import java.io.File;
import java.util.List;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.ResourceUtils;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import com.boot.security.server.page.table.PageTableArgumentResolver;
@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {
/**
*
*
* @return
*/
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurerAdapter() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**").allowedMethods("*");
}
};
}
/**
* datatable
*
* @return
*/
@Bean
public PageTableArgumentResolver tableHandlerMethodArgumentResolver() {
return new PageTableArgumentResolver();
}
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
argumentResolvers.add(tableHandlerMethodArgumentResolver());
}
/**
*
*/
@Value("${files.path}")
private String filesPath;
/**
* 访
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/files/**")
.addResourceLocations(ResourceUtils.FILE_URL_PREFIX + filesPath + File.separator);
}
}

View File

@ -0,0 +1,115 @@
package com.boot.security.server.page.table;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang3.StringUtils;
import org.springframework.core.MethodParameter;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.ModelAndViewContainer;
import com.google.common.collect.Maps;
/**
*
*
* @author
*
*/
public class PageTableArgumentResolver implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter parameter) {
Class<?> cla = parameter.getParameterType();
return cla.isAssignableFrom(PageTableRequest.class);
}
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
HttpServletRequest request = webRequest.getNativeRequest(HttpServletRequest.class);
PageTableRequest tableRequest = new PageTableRequest();
Map<String, String[]> param = request.getParameterMap();
if (param.containsKey("start")) {
tableRequest.setOffset(Integer.parseInt(request.getParameter("start")));
}
if (param.containsKey("length")) {
tableRequest.setLimit(Integer.parseInt(request.getParameter("length")));
}
Map<String, Object> map = Maps.newHashMap();
tableRequest.setParams(map);
param.forEach((k, v) -> {
if (v.length == 1) {
map.put(k, v[0]);
} else {
map.put(k, Arrays.asList(v));
}
});
setOrderBy(tableRequest, map);
removeParam(tableRequest);
return tableRequest;
}
/**
* datatables
*
* @param tableRequest
*/
private void removeParam(PageTableRequest tableRequest) {
Map<String, Object> map = tableRequest.getParams();
if (!CollectionUtils.isEmpty(map)) {
Map<String, Object> param = new HashMap<>();
map.forEach((k, v) -> {
if (k.indexOf("[") < 0 && k.indexOf("]") < 0 && !"_".equals(k)) {
param.put(k, v);
}
});
tableRequest.setParams(param);
}
}
/**
* datatables
*
* @param tableRequest
* @param map
*/
private void setOrderBy(PageTableRequest tableRequest, Map<String, Object> map) {
StringBuilder orderBy = new StringBuilder();
int size = map.size();
for (int i = 0; i < size; i++) {
String index = (String) map.get("order[" + i + "][column]");
if (StringUtils.isEmpty(index)) {
break;
}
String column = (String) map.get("columns[" + index + "][data]");
if (StringUtils.isBlank(column)) {
continue;
}
String sort = (String) map.get("order[" + i + "][dir]");
orderBy.append(column).append(" ").append(sort).append(", ");
}
if (orderBy.length() > 0) {
tableRequest.getParams().put("orderBy",
" order by " + StringUtils.substringBeforeLast(orderBy.toString(), ","));
}
}
}

View File

@ -0,0 +1,43 @@
package com.boot.security.server.page.table;
import java.util.ArrayList;
import java.util.List;
import lombok.Builder;
/**
*
*
* @author
*
*/
@Builder
public class PageTableHandler<T> {
private CountHandler countHandler;
private ListHandler<T> listHandler;
public PageTableResponse<T> handle(PageTableRequest dtRequest) {
int count = 0;
List<T> list = null;
count = this.countHandler.count(dtRequest);
if (count > 0) {
list = this.listHandler.list(dtRequest);
}
if (list == null) {
list = new ArrayList<T>();
}
return PageTableResponse.<T> builder().recordsTotal(count).recordsFiltered(count).data(list).build();
}
public interface ListHandler<T> {
List<T> list(PageTableRequest request);
}
public interface CountHandler {
int count(PageTableRequest request);
}
}

View File

@ -0,0 +1,24 @@
package com.boot.security.server.page.table;
import java.io.Serializable;
import java.util.Map;
import lombok.Getter;
import lombok.Setter;
/**
*
*
* @author
*
*/
@Getter
@Setter
public class PageTableRequest implements Serializable {
private static final long serialVersionUID = 7328071045193618467L;
private Integer offset;
private Integer limit;
private Map<String, Object> params;
}

View File

@ -0,0 +1,27 @@
package com.boot.security.server.page.table;
import java.io.Serializable;
import java.util.List;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
/**
*
*
* @author
*
*/
@Getter
@Setter
@Builder
public class PageTableResponse<T> implements Serializable {
private static final long serialVersionUID = 620421858510718076L;
private Integer recordsTotal;
private Integer recordsFiltered;
private List<T> data;
}