diff --git a/crmeb/.gitignore b/crmeb/.gitignore
index 587ea0f5..71472e1c 100644
--- a/crmeb/.gitignore
+++ b/crmeb/.gitignore
@@ -40,3 +40,4 @@ src/main/java/com/.DS_Store
src/main/java/.DS_Store
src/main/.DS_Store
.DS_Store
+/crmebimage/
diff --git a/crmeb/README.md b/crmeb/README.md
index a5075efb..61718ff9 100644
--- a/crmeb/README.md
+++ b/crmeb/README.md
@@ -48,4 +48,5 @@
# 打印机
1. [易联云文档](http://doc2.10ss.net/337744 "易联云文档")
2. [易联云JAVA SDK](http://doc2.10ss.net/337744 "易联云JAVA SDK gitee文档")
-3. [如何导入第三方JAVA SDK包](https://blog.csdn.net/weixin_46028577/article/details/106342938?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase "如何导入第三方JAVA SDK包")
\ No newline at end of file
+3. [如何导入第三方JAVA SDK包](https://blog.csdn.net/weixin_46028577/article/details/106342938?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase "如何导入第三方JAVA SDK包")
+
diff --git a/crmeb/crmeb-admin/pom.xml b/crmeb/crmeb-admin/pom.xml
new file mode 100644
index 00000000..07f60c6b
--- /dev/null
+++ b/crmeb/crmeb-admin/pom.xml
@@ -0,0 +1,76 @@
+
+
+
+ crmeb
+ com.zbkj
+ 0.0.1-SNAPSHOT
+
+ 4.0.0
+
+ crmeb-admin
+ jar
+
+
+ 0.0.1-SNAPSHOT
+
+
+
+
+ com.zbkj
+ crmeb-service
+ ${crmeb-service}
+
+
+
+
+
+ Crmeb-admin
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+ repackage
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ src/main/resources
+ true
+
+
+
+
+
+
+
+
+ src/main/java
+
+ **/*.xml
+
+
+
+
+
+
diff --git a/crmeb/src/main/java/com/zbkj/crmeb/CrmebApplication.java b/crmeb/crmeb-admin/src/main/java/com/zbkj/admin/CrmebAdminApplication.java
similarity index 80%
rename from crmeb/src/main/java/com/zbkj/crmeb/CrmebApplication.java
rename to crmeb/crmeb-admin/src/main/java/com/zbkj/admin/CrmebAdminApplication.java
index c95914aa..d273c5df 100644
--- a/crmeb/src/main/java/com/zbkj/crmeb/CrmebApplication.java
+++ b/crmeb/crmeb-admin/src/main/java/com/zbkj/admin/CrmebAdminApplication.java
@@ -1,4 +1,4 @@
-package com.zbkj.crmeb;
+package com.zbkj.admin;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
@@ -27,14 +27,12 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableTransactionManagement
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) //去掉数据源
-@ComponentScan(basePackages={"com.utils",
- "com.zbkj.crmeb",
- "com.exception",
- "com.common",
- "com.aop"}) //扫描utils包和父包
-@MapperScan(basePackages = {"com.zbkj.crmeb.*.dao", "com.zbkj.crmeb.*.*.dao"})
-public class CrmebApplication{
+@ComponentScan(basePackages = {"com.zbkj"})
+@MapperScan(basePackages = {"com.zbkj.**.dao"})
+public class CrmebAdminApplication {
+
public static void main(String[] args) {
- SpringApplication.run(CrmebApplication.class, args);
+ SpringApplication.run(CrmebAdminApplication.class, args);
}
+
}
diff --git a/crmeb/src/main/java/com/zbkj/crmeb/config/CorsConfig.java b/crmeb/crmeb-admin/src/main/java/com/zbkj/admin/config/CorsConfig.java
similarity index 90%
rename from crmeb/src/main/java/com/zbkj/crmeb/config/CorsConfig.java
rename to crmeb/crmeb-admin/src/main/java/com/zbkj/admin/config/CorsConfig.java
index 6a1c68f9..081d0c01 100644
--- a/crmeb/src/main/java/com/zbkj/crmeb/config/CorsConfig.java
+++ b/crmeb/crmeb-admin/src/main/java/com/zbkj/admin/config/CorsConfig.java
@@ -1,4 +1,4 @@
-package com.zbkj.crmeb.config;
+package com.zbkj.admin.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -33,7 +33,4 @@ public class CorsConfig{
source.registerCorsConfiguration("/**", buildConfig()); //注册
return new CorsFilter(source);
}
-
- public static String st = "269pbE47g5wSRco2vNyQ";
- public static String sk = "1Pdc1e2F5Kyy!p…p+¥OU0oIu(tG2Fqxzfd—";
}
diff --git a/crmeb/src/main/java/com/zbkj/crmeb/config/DruidConfig.java b/crmeb/crmeb-admin/src/main/java/com/zbkj/admin/config/DruidConfig.java
similarity index 98%
rename from crmeb/src/main/java/com/zbkj/crmeb/config/DruidConfig.java
rename to crmeb/crmeb-admin/src/main/java/com/zbkj/admin/config/DruidConfig.java
index 6e64a8e8..deb52cc3 100644
--- a/crmeb/src/main/java/com/zbkj/crmeb/config/DruidConfig.java
+++ b/crmeb/crmeb-admin/src/main/java/com/zbkj/admin/config/DruidConfig.java
@@ -1,4 +1,4 @@
-package com.zbkj.crmeb.config;
+package com.zbkj.admin.config;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
diff --git a/crmeb/src/main/java/com/zbkj/crmeb/config/JacksonConfig.java b/crmeb/crmeb-admin/src/main/java/com/zbkj/admin/config/JacksonConfig.java
similarity index 97%
rename from crmeb/src/main/java/com/zbkj/crmeb/config/JacksonConfig.java
rename to crmeb/crmeb-admin/src/main/java/com/zbkj/admin/config/JacksonConfig.java
index 2b8037db..6af46461 100644
--- a/crmeb/src/main/java/com/zbkj/crmeb/config/JacksonConfig.java
+++ b/crmeb/crmeb-admin/src/main/java/com/zbkj/admin/config/JacksonConfig.java
@@ -1,4 +1,4 @@
-package com.zbkj.crmeb.config;
+package com.zbkj.admin.config;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
diff --git a/crmeb/src/main/java/com/zbkj/crmeb/config/RestTemplateConfig.java b/crmeb/crmeb-admin/src/main/java/com/zbkj/admin/config/RestTemplateConfig.java
similarity index 98%
rename from crmeb/src/main/java/com/zbkj/crmeb/config/RestTemplateConfig.java
rename to crmeb/crmeb-admin/src/main/java/com/zbkj/admin/config/RestTemplateConfig.java
index 75bfa0f7..e13724f5 100644
--- a/crmeb/src/main/java/com/zbkj/crmeb/config/RestTemplateConfig.java
+++ b/crmeb/crmeb-admin/src/main/java/com/zbkj/admin/config/RestTemplateConfig.java
@@ -1,4 +1,4 @@
-package com.zbkj.crmeb.config;
+package com.zbkj.admin.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
diff --git a/crmeb/src/main/java/com/zbkj/crmeb/config/SchedulerConfig.java b/crmeb/crmeb-admin/src/main/java/com/zbkj/admin/config/SchedulerConfig.java
similarity index 98%
rename from crmeb/src/main/java/com/zbkj/crmeb/config/SchedulerConfig.java
rename to crmeb/crmeb-admin/src/main/java/com/zbkj/admin/config/SchedulerConfig.java
index ae685931..2698f253 100644
--- a/crmeb/src/main/java/com/zbkj/crmeb/config/SchedulerConfig.java
+++ b/crmeb/crmeb-admin/src/main/java/com/zbkj/admin/config/SchedulerConfig.java
@@ -1,4 +1,4 @@
-package com.zbkj.crmeb.config;
+package com.zbkj.admin.config;
import lombok.Data;
import org.springframework.context.annotation.Configuration;
diff --git a/crmeb/src/main/java/com/zbkj/crmeb/config/SwaggerConfig.java b/crmeb/crmeb-admin/src/main/java/com/zbkj/admin/config/SwaggerConfig.java
similarity index 81%
rename from crmeb/src/main/java/com/zbkj/crmeb/config/SwaggerConfig.java
rename to crmeb/crmeb-admin/src/main/java/com/zbkj/admin/config/SwaggerConfig.java
index 7affb5d9..158aa233 100644
--- a/crmeb/src/main/java/com/zbkj/crmeb/config/SwaggerConfig.java
+++ b/crmeb/crmeb-admin/src/main/java/com/zbkj/admin/config/SwaggerConfig.java
@@ -1,12 +1,11 @@
-package com.zbkj.crmeb.config;
+package com.zbkj.admin.config;
-import com.constants.Constants;
+import com.zbkj.common.constants.Constants;
import com.google.common.base.Predicate;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
@@ -44,11 +43,9 @@ public class SwaggerConfig{
@Value("${server.port}")
private String port;
- @Value("${server.domain}")
+ @Value("${crmeb.domain}")
private String domain;
-
-
@Bean("admin")
public Docket createRestApis() {
return new Docket(DocumentationType.SWAGGER_2)
@@ -59,7 +56,7 @@ public class SwaggerConfig{
.enable(swaggerEnabled)
.select()
// 扫描的路径包
- .apis(RequestHandlerSelectors.basePackage("com.zbkj.crmeb"))
+ .apis(RequestHandlerSelectors.basePackage("com.zbkj.admin"))
// 指定路径处理PathSelectors.any()代表所有的路径
.paths(adminPathsAnt())
.build()
@@ -69,26 +66,6 @@ public class SwaggerConfig{
.pathMapping("/");
}
- @Bean("front")
- public Docket create1RestApis() {
- return new Docket(DocumentationType.SWAGGER_2)
- .groupName("front")
- .host(domain)
- .apiInfo(apiInfo())
- // 是否开启
- .enable(swaggerEnabled)
- .select()
- // 扫描的路径包
- .apis(RequestHandlerSelectors.basePackage("com.zbkj.crmeb"))
- // 指定路径处理PathSelectors.any()代表所有的路径
- .paths(frontPathsAnt()) //只监听
- .build()
- .securitySchemes(security())
- .securityContexts(securityContexts())
-// .globalOperationParameters(pars) // 针对单个url的验证 如果需要的话
- .pathMapping("/");
- }
-
@Bean("public")
public Docket create2RestApis() {
return new Docket(DocumentationType.SWAGGER_2)
@@ -99,7 +76,7 @@ public class SwaggerConfig{
.enable(swaggerEnabled)
.select()
// 扫描的路径包
- .apis(RequestHandlerSelectors.basePackage("com.zbkj.crmeb"))
+ .apis(RequestHandlerSelectors.basePackage("com.zbkj.admin"))
// 指定路径处理PathSelectors.any()代表所有的路径
.paths(publicPathsAnt()) //只监听
.build()
@@ -113,10 +90,6 @@ public class SwaggerConfig{
return PathSelectors.ant("/api/admin/**");
}
- private Predicate frontPathsAnt() {
- return PathSelectors.ant("/api/front/**");
- }
-
private Predicate publicPathsAnt() {
return PathSelectors.ant("/api/public/**");
}
diff --git a/crmeb/src/main/java/com/zbkj/crmeb/config/TaskExecutorConfig.java b/crmeb/crmeb-admin/src/main/java/com/zbkj/admin/config/TaskExecutorConfig.java
similarity index 99%
rename from crmeb/src/main/java/com/zbkj/crmeb/config/TaskExecutorConfig.java
rename to crmeb/crmeb-admin/src/main/java/com/zbkj/admin/config/TaskExecutorConfig.java
index cd59b8df..2ce6186f 100644
--- a/crmeb/src/main/java/com/zbkj/crmeb/config/TaskExecutorConfig.java
+++ b/crmeb/crmeb-admin/src/main/java/com/zbkj/admin/config/TaskExecutorConfig.java
@@ -1,4 +1,4 @@
-package com.zbkj.crmeb.config;
+package com.zbkj.admin.config;
import lombok.Data;
import org.springframework.context.annotation.Bean;
diff --git a/crmeb/crmeb-admin/src/main/java/com/zbkj/admin/config/WebConfig.java b/crmeb/crmeb-admin/src/main/java/com/zbkj/admin/config/WebConfig.java
new file mode 100644
index 00000000..c052dbca
--- /dev/null
+++ b/crmeb/crmeb-admin/src/main/java/com/zbkj/admin/config/WebConfig.java
@@ -0,0 +1,115 @@
+package com.zbkj.admin.config;
+
+import com.zbkj.common.constants.Constants;
+import com.zbkj.common.interceptor.SwaggerInterceptor;
+import com.zbkj.admin.filter.ResponseFilter;
+import com.zbkj.common.config.CrmebConfig;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.boot.web.servlet.FilterRegistrationBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+import org.springframework.web.servlet.handler.MappedInterceptor;
+
+import java.io.File;
+
+/**
+ * token验证拦截器
+ * +----------------------------------------------------------------------
+ * | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 2016~2020 https://www.crmeb.com All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+ * +----------------------------------------------------------------------
+ * | Author: CRMEB Team
+ * +----------------------------------------------------------------------
+ */
+@Configuration
+public class WebConfig implements WebMvcConfigurer {
+
+ // 这里使用一个Bean为的是可以在拦截器中自由注入,也可以在拦截器中使用SpringUtil.getBean 获取
+ // 但是觉得这样更优雅
+
+ @Autowired
+ CrmebConfig crmebConfig;
+
+ @Bean
+ public ResponseFilter responseFilter(){ return new ResponseFilter(); }
+
+ @Value("${swagger.basic.username}")
+ private String username;
+ @Value("${swagger.basic.password}")
+ private String password;
+ @Value("${swagger.basic.check}")
+ private Boolean check;
+
+
+ @Override
+ public void addInterceptors(InterceptorRegistry registry) {
+ //添加token拦截器
+ //addPathPatterns添加需要拦截的命名空间;
+ //excludePathPatterns添加排除拦截命名空间
+
+
+// //后台token拦截
+// registry.addInterceptor(adminTokenInterceptor()).
+// addPathPatterns("/api/admin/**").
+// excludePathPatterns("/api/admin/validate/**").
+// excludePathPatterns("/api/admin/login").
+// excludePathPatterns("/api/admin/logout").
+// excludePathPatterns("/api/admin/getLoginPic").
+// excludePathPatterns("/api/admin/wechat/config").
+// excludePathPatterns("/api/admin/authorize/login").
+// excludePathPatterns("/api/admin/payment/callback/**").
+//// excludePathPatterns("/api/admin/system/role/menu").
+// excludePathPatterns("/api/admin/system/role/info").
+// excludePathPatterns("/swagger-resources/**", "/webjars/**", "/v2/**", "/swagger-ui.html/**");
+//
+// //后台权限规则
+// registry.addInterceptor(adminAuthInterceptor()).
+// addPathPatterns("/api/admin/**").
+// excludePathPatterns("/api/admin/validate/**").
+// excludePathPatterns("/api/admin/login").
+// excludePathPatterns("/api/admin/logout").
+// excludePathPatterns("/api/admin/getLoginPic").
+// excludePathPatterns("/api/admin/payment/callback/**").
+// excludePathPatterns("/swagger-resources/**", "/webjars/**", "/v2/**", "/swagger-ui.html/**");
+
+ }
+
+ public void addResourceHandlers(ResourceHandlerRegistry registry) {
+ registry.addResourceHandler("/**")
+ .addResourceLocations("classpath:/static/");
+ registry.addResourceHandler("doc.html")
+ .addResourceLocations("classpath:/META-INF/resources/");
+ registry.addResourceHandler("/webjars/**")
+ .addResourceLocations("classpath:/META-INF/resources/webjars/");
+
+ /** 本地文件上传路径 */
+ registry.addResourceHandler(Constants.UPLOAD_TYPE_IMAGE + "/**")
+ .addResourceLocations("file:" + crmebConfig.getImagePath() + "/" + Constants.UPLOAD_TYPE_IMAGE + "/");
+
+ }
+
+ @Bean
+ public FilterRegistrationBean filterRegister()
+ {
+ //注册过滤器
+ FilterRegistrationBean registration = new FilterRegistrationBean(responseFilter());
+ // 仅仅api前缀的请求才会拦截
+ registration.addUrlPatterns("/api/*");
+ return registration;
+ }
+
+ /* 必须在此处配置拦截器,要不然拦不到swagger的静态资源 */
+ @Bean
+ @ConditionalOnProperty(name = "swagger.basic.enable", havingValue = "true")
+ public MappedInterceptor getMappedInterceptor() {
+ return new MappedInterceptor(new String[]{"/doc.html", "/webjars/**"}, new SwaggerInterceptor(username, password, check));
+ }
+}
diff --git a/crmeb/crmeb-admin/src/main/java/com/zbkj/admin/config/WebSecurityConfig.java b/crmeb/crmeb-admin/src/main/java/com/zbkj/admin/config/WebSecurityConfig.java
new file mode 100644
index 00000000..9fffe951
--- /dev/null
+++ b/crmeb/crmeb-admin/src/main/java/com/zbkj/admin/config/WebSecurityConfig.java
@@ -0,0 +1,155 @@
+package com.zbkj.admin.config;
+
+import com.zbkj.admin.filter.JwtAuthenticationTokenFilter;
+import com.zbkj.admin.manager.AuthenticationEntryPointImpl;
+import com.zbkj.admin.manager.CustomAccessDeniedHandler;
+import com.zbkj.admin.manager.CustomAuthenticationProvider;
+import com.zbkj.common.constants.Constants;
+import com.zbkj.service.service.impl.UserDetailServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.HttpMethod;
+import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
+import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
+import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
+import org.springframework.security.config.http.SessionCreationPolicy;
+import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
+import org.springframework.security.web.authentication.logout.LogoutFilter;
+import org.springframework.web.filter.CorsFilter;
+
+/**
+ * Security配置
+ * +----------------------------------------------------------------------
+ * | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 2016~2020 https://www.crmeb.com All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+ * +----------------------------------------------------------------------
+ * | Author: CRMEB Team
+ * +----------------------------------------------------------------------
+ */
+@Configuration
+@EnableWebSecurity
+@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
+public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
+
+ /**
+ * 跨域过滤器
+ */
+ @Autowired
+ private CorsFilter corsFilter;
+
+ /**
+ * token认证过滤器
+ */
+ @Bean
+ public JwtAuthenticationTokenFilter jwtAuthenticationTokenFilter() {
+ return new JwtAuthenticationTokenFilter();
+ }
+
+ /**
+ * 认证失败处理类
+ */
+ @Bean
+ public AuthenticationEntryPointImpl unauthorizedHandler() {
+ return new AuthenticationEntryPointImpl();
+ }
+
+ /**
+ * 鉴权失败处理类
+ */
+ @Bean
+ public CustomAccessDeniedHandler accessDeniedHandler() {
+ return new CustomAccessDeniedHandler();
+ }
+
+ /**
+ * 这里将Spring Security自带的authenticationManager声明成Bean,声明它的作用是用它帮我们进行认证操作,
+ * 调用这个Bean的authenticate方法会由Spring Security自动帮我们做认证。
+ */
+// @Bean
+// public AuthenticationManager authenticationManager() throws Exception {
+// return new CusAuthenticationManager(customAuthenticationProvider);
+// }
+
+ @Override
+ protected void configure(AuthenticationManagerBuilder auth) throws Exception {
+ auth.authenticationProvider(new CustomAuthenticationProvider(new UserDetailServiceImpl()));
+ }
+
+ /**
+ * anyRequest | 匹配所有请求路径
+ * access | SpringEl表达式结果为true时可以访问
+ * anonymous | 匿名可以访问
+ * denyAll | 用户不能访问
+ * fullyAuthenticated | 用户完全认证可以访问(非remember-me下自动登录)
+ * hasAnyAuthority | 如果有参数,参数表示权限,则其中任何一个权限可以访问
+ * hasAnyRole | 如果有参数,参数表示角色,则其中任何一个角色可以访问
+ * hasAuthority | 如果有参数,参数表示权限,则其权限可以访问
+ * hasIpAddress | 如果有参数,参数表示IP地址,如果用户IP和参数匹配,则可以访问
+ * hasRole | 如果有参数,参数表示角色,则其角色可以访问
+ * permitAll | 用户可以任意访问
+ * rememberMe | 允许通过remember-me登录的用户访问
+ * authenticated | 用户登录后可访问
+ */
+ @Override
+ protected void configure(HttpSecurity http) throws Exception {
+
+ // CRSF禁用,因为不使用session
+ http.cors().and().csrf().disable()
+ // 认证失败处理类
+ .exceptionHandling().authenticationEntryPoint(unauthorizedHandler())
+ .accessDeniedHandler(accessDeniedHandler()).and()
+ // 基于token,所以不需要session
+ .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
+ // 过滤请求
+ .authorizeRequests()
+ // 跨域预检请求
+// .antMatchers(HttpMethod.OPTIONS, "/**").permitAll()
+ // 对于登录login 验证码captchaImage 和其他放行的目录 允许匿名访问"/citylife/front/**"
+ .antMatchers("/api/admin/login", "/api/admin/validate/code/get").permitAll()
+ .antMatchers("/api/admin/getLoginPic").permitAll()
+ // 放行资源路径
+ .antMatchers("/"+ Constants.UPLOAD_TYPE_IMAGE +"/**").anonymous()
+ // 放行图片、文件上传
+ .antMatchers("/api/admin/upload/image").permitAll()
+ .antMatchers("/api/admin/upload/file").permitAll()
+// .antMatchers("/wx/user/*/login","/citylife/nocheck/**").anonymous()
+ .antMatchers(
+ HttpMethod.GET,
+ "/*.html",
+ "/**/*.html",
+ "/**/*.css",
+ "/**/*.js"
+ ).permitAll()
+ .antMatchers("/profile/**").anonymous()
+ .antMatchers("/common/download**").anonymous()
+ .antMatchers("/common/download/resource**").anonymous()
+ .antMatchers("/doc.html").permitAll()
+ .antMatchers("/swagger-resources/**").permitAll()
+ .antMatchers("/webjars/**").permitAll()
+ .antMatchers("/v2/**").permitAll()
+ .antMatchers("/swagger-ui.html/**").permitAll()
+ .antMatchers("/*/api-docs").anonymous()
+ .antMatchers("/druid/**").anonymous()
+ .antMatchers("/captcha/get", "/captcha/check").anonymous()
+ .antMatchers("/api/admin/payment/callback/**").anonymous()
+ .antMatchers("/api/public/**").anonymous()
+ // 除上面外的所有请求全部需要鉴权认证
+ .anyRequest().authenticated()
+ .and()
+ .headers().frameOptions().disable();// 防止iframe 造成跨域
+// http.logout().logoutUrl("/logout").logoutSuccessHandler(logoutSuccessHandler);
+ // 添加JWT filter
+ // 开启登录认证流程过滤器
+ http.addFilterBefore(jwtAuthenticationTokenFilter(), UsernamePasswordAuthenticationFilter.class);
+ // 添加CORS filter
+ http.addFilterBefore(corsFilter, JwtAuthenticationTokenFilter.class);
+ http.addFilterBefore(corsFilter, LogoutFilter.class);
+ }
+
+}
diff --git a/crmeb/crmeb-admin/src/main/java/com/zbkj/admin/controller/AdminLoginController.java b/crmeb/crmeb-admin/src/main/java/com/zbkj/admin/controller/AdminLoginController.java
new file mode 100644
index 00000000..ff902a31
--- /dev/null
+++ b/crmeb/crmeb-admin/src/main/java/com/zbkj/admin/controller/AdminLoginController.java
@@ -0,0 +1,86 @@
+package com.zbkj.admin.controller;
+
+import com.zbkj.common.request.SystemAdminLoginRequest;
+import com.zbkj.common.response.CommonResult;
+import com.zbkj.common.response.MenusResponse;
+import com.zbkj.common.response.SystemAdminResponse;
+import com.zbkj.common.response.SystemLoginResponse;
+import com.zbkj.common.utils.CrmebUtil;
+import com.zbkj.admin.service.AdminLoginService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 管理端登录服务
+ * +----------------------------------------------------------------------
+ * | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 2016~2020 https://www.crmeb.com All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+ * +----------------------------------------------------------------------
+ * | Author: CRMEB Team
+ * +----------------------------------------------------------------------
+ */
+@Slf4j
+@RestController
+@RequestMapping("api/admin")
+@Api(tags = "管理端登录服务")
+public class AdminLoginController {
+
+ @Autowired
+ private AdminLoginService adminLoginService;
+
+ @ApiOperation(value="PC登录")
+ @PostMapping(value = "/login", produces = "application/json")
+ public CommonResult SystemAdminLogin(@RequestBody @Validated SystemAdminLoginRequest systemAdminLoginRequest, HttpServletRequest request) {
+ String ip = CrmebUtil.getClientIp(request);
+ SystemLoginResponse systemAdminResponse = adminLoginService.login(systemAdminLoginRequest, ip);
+ return CommonResult.success(systemAdminResponse, "login success");
+ }
+
+ @PreAuthorize("hasAuthority('admin:logout')")
+ @ApiOperation(value="PC登出")
+ @GetMapping(value = "/logout")
+ public CommonResult SystemAdminLogout() {
+ adminLoginService.logout();
+ return CommonResult.success("logout success");
+ }
+
+ @PreAuthorize("hasAuthority('admin:info')")
+ @ApiOperation(value="获取用户详情")
+ @GetMapping(value = "/getAdminInfoByToken")
+ public CommonResult getAdminInfo() {
+ return CommonResult.success(adminLoginService.getInfoByToken());
+ }
+
+ /**
+ * 获取登录页图片
+ * @return Map
+ */
+ @ApiOperation(value = "获取登录页图片")
+ @RequestMapping(value = "/getLoginPic", method = RequestMethod.GET)
+ public CommonResult