diff --git a/api/pom.xml b/api/pom.xml
index 76f6608d..5dbf5192 100644
--- a/api/pom.xml
+++ b/api/pom.xml
@@ -61,6 +61,25 @@
+
+
+ io.jsonwebtoken
+ jjwt-api
+ 0.12.3
+
+
+ io.jsonwebtoken
+ jjwt-impl
+ 0.12.3
+ runtime
+
+
+
+ io.jsonwebtoken
+ jjwt-jackson
+ 0.12.3
+ runtime
+
diff --git a/api/src/main/java/com/qihang/api/Api.java b/api/src/main/java/com/qihang/api/Api.java
index eae9f356..b4140b43 100644
--- a/api/src/main/java/com/qihang/api/Api.java
+++ b/api/src/main/java/com/qihang/api/Api.java
@@ -3,6 +3,7 @@ package com.qihang.api;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+import org.springframework.context.annotation.Bean;
/**
* Hello world!
@@ -17,4 +18,9 @@ public class Api
System.out.println( "Hello World! Api" );
SpringApplication.run(Api.class, args);
}
+
+// @Bean
+// public TokenFilter tokenFilter() {
+// return new TokenFilter();
+// }
}
diff --git a/api/src/main/java/com/qihang/api/TokenFilter.java b/api/src/main/java/com/qihang/api/TokenFilter.java
new file mode 100644
index 00000000..38b695b6
--- /dev/null
+++ b/api/src/main/java/com/qihang/api/TokenFilter.java
@@ -0,0 +1,33 @@
+package com.qihang.api;
+
+import org.springframework.cloud.gateway.filter.GatewayFilterChain;
+import org.springframework.cloud.gateway.filter.GlobalFilter;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.Ordered;
+import org.springframework.http.HttpStatus;
+import org.springframework.util.StringUtils;
+import org.springframework.web.server.ServerWebExchange;
+import reactor.core.publisher.Mono;
+
+@Configuration
+public class TokenFilter implements GlobalFilter, Ordered {
+ private static final String TOKEN_HEADER = "Authorization";
+ private static final String TOKEN_PREFIX = "Bearer ";
+ private static final String SECRET_KEY = "mysecretkey235200303325adjjeddd";
+ @Override
+ public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {
+ String token = exchange.getRequest().getHeaders().getFirst(TOKEN_HEADER);
+ System.out.println("Token:"+token);
+ // TODO: 统一鉴权处理
+ if(!StringUtils.hasText(token)){
+ exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
+ return exchange.getResponse().setComplete();
+ }
+ return chain.filter(exchange);
+ }
+
+ @Override
+ public int getOrder() {
+ return -10000;
+ }
+}
diff --git a/api/src/main/resources/application.yaml b/api/src/main/resources/application.yaml
index f6aa5da1..174bca79 100644
--- a/api/src/main/resources/application.yaml
+++ b/api/src/main/resources/application.yaml
@@ -1,13 +1,12 @@
server:
port: 8080
-
spring:
application:
name: api-service
- security:
- user:
- name: admin
- password: password
+# security:
+# user:
+# name: admin
+# password: password
basic:
enabled: true
cloud:
@@ -22,11 +21,20 @@ spring:
enabled: true
routes:
- id: tao_oms_route
- uri: lb://tao-oms # lb 表示从 nacos 中按照名称获取微服务,并遵循负载均衡策略,user-service 对应用户微服务应用名
+ uri: lb://tao-oms
predicates:
- - Path=/tao-service/** # 使用断言
+ - Path=/api/tao-service/**
filters:
- - StripPrefix=1 # 使用过滤器
+ - StripPrefix=2
+ - id: oms_api_route
+ uri: lb://oms-api
+ predicates:
+ - Path=/api/oms-api/**
+ filters:
+ - StripPrefix=2
+# - TokenFilter
+# default-filters:
+# - TokenFilter
# - name: Security # 添加安全过滤器
# args:
# springSecurityFilterChain: # 配置Spring Security过滤器链
diff --git a/oms-api/pom.xml b/oms-api/pom.xml
index af9d1fc7..06031083 100644
--- a/oms-api/pom.xml
+++ b/oms-api/pom.xml
@@ -26,6 +26,7 @@
UTF-8
3.0.2
2022.0.0.0
+ 0.11.5
@@ -116,9 +117,23 @@
io.jsonwebtoken
- jjwt
- 0.9.1
+ jjwt-api
+ ${jwt.version}
+
+ io.jsonwebtoken
+ jjwt-impl
+ ${jwt.version}
+ runtime
+
+
+
+ io.jsonwebtoken
+ jjwt-jackson
+ ${jwt.version}
+ runtime
+
+
eu.bitwalker
diff --git a/oms-api/src/main/java/com/qihang/oms/api/Api.java b/oms-api/src/main/java/com/qihang/oms/api/OmsApi.java
similarity index 83%
rename from oms-api/src/main/java/com/qihang/oms/api/Api.java
rename to oms-api/src/main/java/com/qihang/oms/api/OmsApi.java
index d0f97041..79c8d809 100644
--- a/oms-api/src/main/java/com/qihang/oms/api/Api.java
+++ b/oms-api/src/main/java/com/qihang/oms/api/OmsApi.java
@@ -2,13 +2,11 @@ package com.qihang.oms.api;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
-import org.springframework.context.annotation.ComponentScans;
import org.springframework.web.client.RestTemplate;
/**
@@ -19,12 +17,12 @@ import org.springframework.web.client.RestTemplate;
@EnableDiscoveryClient
@ComponentScan(basePackages={"com.qihang"})
@SpringBootApplication
-public class Api
+public class OmsApi
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
- SpringApplication.run(Api.class, args);
+ SpringApplication.run(OmsApi.class, args);
}
@Bean
diff --git a/oms-api/src/main/java/com/qihang/oms/api/security/JwtAuthenticationTokenFilter.java b/oms-api/src/main/java/com/qihang/oms/api/security/JwtAuthenticationTokenFilter.java
index adfba54b..72ea0215 100644
--- a/oms-api/src/main/java/com/qihang/oms/api/security/JwtAuthenticationTokenFilter.java
+++ b/oms-api/src/main/java/com/qihang/oms/api/security/JwtAuthenticationTokenFilter.java
@@ -41,9 +41,16 @@ public class JwtAuthenticationTokenFilter extends OncePerRequestFilter
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
throws ServletException, IOException
{
- String token = request.getHeader(TOKEN_HEADER);
+// String token = exchange.getRequest().getHeaders().getFirst(TOKEN_HEADER);
+ String token = request.getHeader("Authorization");
+
log.info("intercept " + request.getRequestURI());
log.info("token: " + token);
+ if(request.getRequestURI().equals("/login")){
+ // 登录页面,放行
+ chain.doFilter(request, response);
+ return;
+ }
LoginUser loginUser = tokenService.getLoginUser(request);
if (loginUser !=null )
{
@@ -51,6 +58,9 @@ public class JwtAuthenticationTokenFilter extends OncePerRequestFilter
UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(loginUser, null, loginUser.getAuthorities());
authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
SecurityContextHolder.getContext().setAuthentication(authenticationToken);
+ }else {
+ fallback(" 授权过期!",response);
+ return;
}
chain.doFilter(request, response);
}
diff --git a/oms-core/pom.xml b/oms-core/pom.xml
index d289426a..466ed1fc 100644
--- a/oms-core/pom.xml
+++ b/oms-core/pom.xml
@@ -19,7 +19,8 @@
UTF-8
UTF-8
3.0.2
- 0.9.1
+ 0.11.5
+ 2022.0.0.0
@@ -46,20 +47,19 @@
spring-tx
6.0.4
-
- org.springframework.boot
- spring-boot-starter-security
-
org.springframework.boot
spring-boot-starter-data-redis
-
-
-
-
-
-
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-config
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-discovery
+
jakarta.servlet
@@ -68,8 +68,22 @@
provided
+
+ com.alibaba
+ druid-spring-boot-starter
+ 1.2.21
+
+
+ mysql
+ mysql-connector-java
+ 8.0.33
+
-
+
+ com.baomidou
+ mybatis-plus-boot-starter
+ 3.5.5
+
junit
junit
@@ -91,9 +105,23 @@
io.jsonwebtoken
- jjwt
+ jjwt-api
${jwt.version}
+
+ io.jsonwebtoken
+ jjwt-impl
+ ${jwt.version}
+ runtime
+
+
+
+ io.jsonwebtoken
+ jjwt-jackson
+ ${jwt.version}
+ runtime
+
+
com.alibaba.fastjson2
fastjson2
@@ -113,14 +141,21 @@
-
-
- org.springframework.boot
- spring-boot-dependencies
- ${spring-boot.version}
- pom
- import
-
-
+
+
+ org.springframework.boot
+ spring-boot-dependencies
+ ${spring-boot.version}
+ pom
+ import
+
+
+ com.alibaba.cloud
+ spring-cloud-alibaba-dependencies
+ ${spring-cloud-alibaba.version}
+ pom
+ import
+
+
diff --git a/oms-core/src/main/java/com/qihang/core/App.java b/oms-core/src/main/java/com/qihang/core/OmsCoreApplication.java
similarity index 58%
rename from oms-core/src/main/java/com/qihang/core/App.java
rename to oms-core/src/main/java/com/qihang/core/OmsCoreApplication.java
index be4d72b0..6501a985 100644
--- a/oms-core/src/main/java/com/qihang/core/App.java
+++ b/oms-core/src/main/java/com/qihang/core/OmsCoreApplication.java
@@ -3,23 +3,20 @@ package com.qihang.core;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.ComponentScan;
-import org.springframework.web.client.RestTemplate;
/**
* Hello world!
*
*/
@EnableCaching
-@ComponentScan(basePackages = "com.qihang")
+//@ComponentScan(basePackages = "com.qihang")
@SpringBootApplication
-public class App
+public class OmsCoreApplication
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
- SpringApplication.run(App.class, args);
+ SpringApplication.run(OmsCoreApplication.class, args);
}
}
diff --git a/oms-core/src/main/java/com/qihang/core/config/SecurityConfig.java b/oms-core/src/main/java/com/qihang/core/config/SecurityConfig.java
index cae5b87a..e845e061 100644
--- a/oms-core/src/main/java/com/qihang/core/config/SecurityConfig.java
+++ b/oms-core/src/main/java/com/qihang/core/config/SecurityConfig.java
@@ -1,81 +1,49 @@
-//package com.qihang.core.config;
-//
-//import com.qihang.core.security.AuthenticationEntryPointImpl;
-//import com.qihang.core.security.LogoutSuccessHandlerImpl;
-//import org.springframework.beans.factory.annotation.Autowired;
-//import org.springframework.beans.factory.annotation.Value;
-//import org.springframework.context.annotation.Bean;
-//import org.springframework.context.annotation.Configuration;
-//import org.springframework.http.HttpMethod;
-//import org.springframework.security.config.annotation.SecurityBuilder;
-//import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
-//import org.springframework.security.config.annotation.web.WebSecurityConfigurer;
-//import org.springframework.security.config.annotation.web.builders.HttpSecurity;
-//import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
-//import org.springframework.security.config.http.SessionCreationPolicy;
-//import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
-//import org.springframework.security.web.SecurityFilterChain;
-//
-//@Configuration
-//@EnableWebSecurity
-//@EnableMethodSecurity
-//public class SecurityConfig {
-// @Value("${auth.whitelist:/login}")
-// private String[] URL_WHITELIST;
-//
-// @Autowired
-// private AuthenticationEntryPointImpl unauthorizedHandler;
-// @Autowired
-// private LogoutSuccessHandlerImpl logoutSuccessHandler;
-// @Bean
-// public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
-//// http
-//// // CSRF禁用,因为不使用session
-//// .csrf().disable()
-//// .authorizeRequests()
-//// .anyRequest().authenticated()
-//// .and()
-//// .formLogin()
-//// .and()
-//// .httpBasic();
-// // CSRF禁用,因为不使用session
-// http.csrf().disable()
-// // 禁用HTTP响应标头
-// .headers().cacheControl().disable().and()
-// // 认证失败处理类
-//// .exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and()
-// // 基于token,所以不需要session
-// .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
-// // 过滤请求
-// .authorizeRequests()
-// .formLogin(form -> form.
-// loginProcessingUrl("/login")
-// .usernameParameter("username")
-// .passwordParameter("password")
-// .successHandler(unauthorizedHandler)
-//// .failureHandler(unauthorizedHandler))
-// // 对于登录login 注册register 验证码captchaImage 允许匿名访问
-// .antMatchers("/login", "/register", "/captchaImage").permitAll()
-// // 静态资源,可匿名访问
-// .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
-// .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()
-// .antMatchers("/test/**").permitAll()
-// .antMatchers("/preview/**").permitAll()
-// .antMatchers("/h2-console/**").permitAll()
-// .antMatchers("/taoapi2/**").permitAll()
-// // 除上面外的所有请求全部需要鉴权认证
-// .anyRequest().authenticated()
-// .and()
-// .headers().frameOptions().disable();
-// return http.build();
-// }
-//
-// /**
-// * 强散列哈希加密实现
-// */
-// @Bean
-// public BCryptPasswordEncoder bCryptPasswordEncoder()
-// {
-// return new BCryptPasswordEncoder();
-// }
-//}
+package com.qihang.core.config;
+
+import com.qihang.core.security.AuthenticationEntryPointImpl;
+import com.qihang.core.security.LogoutSuccessHandlerImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.HttpMethod;
+import org.springframework.security.config.annotation.SecurityBuilder;
+import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
+import org.springframework.security.config.annotation.web.WebSecurityConfigurer;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
+import org.springframework.security.config.http.SessionCreationPolicy;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.security.web.SecurityFilterChain;
+
+@Configuration
+@EnableWebSecurity
+@EnableMethodSecurity
+public class SecurityConfig {
+ @Autowired
+ private AuthenticationEntryPointImpl unauthorizedHandler;
+ @Autowired
+ private LogoutSuccessHandlerImpl logoutSuccessHandler;
+ @Bean
+ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
+ http
+ .csrf().disable()
+ .authorizeRequests()
+ .anyRequest().authenticated()
+ .and()
+ .formLogin()
+ .and()
+ .httpBasic();
+
+ return http.build();
+ }
+
+ /**
+ * 强散列哈希加密实现
+ */
+ @Bean
+ public BCryptPasswordEncoder bCryptPasswordEncoder()
+ {
+ return new BCryptPasswordEncoder();
+ }
+}
diff --git a/oms-core/src/main/java/com/qihang/core/controller/HomeController.java b/oms-core/src/main/java/com/qihang/core/controller/HomeController.java
new file mode 100644
index 00000000..b199c80b
--- /dev/null
+++ b/oms-core/src/main/java/com/qihang/core/controller/HomeController.java
@@ -0,0 +1,13 @@
+package com.qihang.core.controller;
+
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class HomeController {
+
+ @GetMapping("/home")
+ public String home(){
+ return "oms-core:home";
+ }
+}
diff --git a/oms-core/src/main/java/com/qihang/core/security/SecurityUser.java b/oms-core/src/main/java/com/qihang/core/security/SecurityUser.java
index c0a41510..7511d3f1 100644
--- a/oms-core/src/main/java/com/qihang/core/security/SecurityUser.java
+++ b/oms-core/src/main/java/com/qihang/core/security/SecurityUser.java
@@ -10,8 +10,8 @@ import java.util.Collection;
* TODO
*
* @Description
- * @Author laizhenghua
- * @Date 2023/6/29 22:49
+ * @Author
+ * @Date
**/
public class SecurityUser implements UserDetails {
private SysUser userEntity;
diff --git a/oms-core/src/main/java/com/qihang/core/security/TokenService.java b/oms-core/src/main/java/com/qihang/core/security/TokenService.java
index c95b0daf..44527764 100644
--- a/oms-core/src/main/java/com/qihang/core/security/TokenService.java
+++ b/oms-core/src/main/java/com/qihang/core/security/TokenService.java
@@ -30,15 +30,15 @@ import java.util.concurrent.TimeUnit;
public class TokenService
{
// 令牌自定义标识
- @Value("${token.header}")
+ @Value("${token.header:'Authorization'}")
private String header;
// 令牌秘钥
- @Value("${token.secret}")
+ @Value("${token.secret:'mysecretkey235200303325adjjeddd'}")
private String secret;
// 令牌有效期(默认30分钟)
- @Value("${token.expireTime}")
+ @Value("${token.expireTime:30}")
private int expireTime;
protected static final long MILLIS_SECOND = 1000;
diff --git a/oms-core/src/main/resources/application.properties b/oms-core/src/main/resources/application.properties
deleted file mode 100644
index 5193cd68..00000000
--- a/oms-core/src/main/resources/application.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-spring.redis.host=localhost
-spring.redis.port=6379
-spring.redis.password=
-spring.redis.database=0
\ No newline at end of file
diff --git a/oms-core/src/main/resources/application.yaml b/oms-core/src/main/resources/application.yaml
new file mode 100644
index 00000000..19fc59cb
--- /dev/null
+++ b/oms-core/src/main/resources/application.yaml
@@ -0,0 +1,14 @@
+spring:
+ cloud:
+ nacos:
+ serverAddr: 127.0.0.1:8848
+ discovery:
+ server-addr: 127.0.0.1:8848
+ config:
+ import:
+ - nacos:qihang-oms.yaml?refresh=true
+ application:
+ name: oms-core
+
+server:
+ port: 8083
\ No newline at end of file
diff --git a/oms-core/src/test/java/com/qihang/AppTest.java b/oms-core/src/test/java/com/qihang/OmsCoreApplicationTest.java
similarity index 77%
rename from oms-core/src/test/java/com/qihang/AppTest.java
rename to oms-core/src/test/java/com/qihang/OmsCoreApplicationTest.java
index 14e13c7a..08b52d8c 100644
--- a/oms-core/src/test/java/com/qihang/AppTest.java
+++ b/oms-core/src/test/java/com/qihang/OmsCoreApplicationTest.java
@@ -7,7 +7,7 @@ import junit.framework.TestSuite;
/**
* Unit test for simple App.
*/
-public class AppTest
+public class OmsCoreApplicationTest
extends TestCase
{
/**
@@ -15,7 +15,7 @@ public class AppTest
*
* @param testName name of the test case
*/
- public AppTest( String testName )
+ public OmsCoreApplicationTest(String testName )
{
super( testName );
}
@@ -25,7 +25,7 @@ public class AppTest
*/
public static Test suite()
{
- return new TestSuite( AppTest.class );
+ return new TestSuite( OmsCoreApplicationTest.class );
}
/**
diff --git a/tao-oms/src/main/java/com/qihang/tao/controller/HomeController.java b/tao-oms/src/main/java/com/qihang/tao/controller/HomeController.java
index a76e7f5c..be7a5789 100644
--- a/tao-oms/src/main/java/com/qihang/tao/controller/HomeController.java
+++ b/tao-oms/src/main/java/com/qihang/tao/controller/HomeController.java
@@ -1,5 +1,6 @@
package com.qihang.tao.controller;
+import jakarta.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
@@ -16,7 +17,9 @@ public class HomeController {
private String serverName;
@GetMapping(value = "/test/na")
- public String get() {
+ public String get(HttpServletRequest request) {
+ String token = request.getHeader("Authorization");
+ System.out.println("tao-api token:"+token);
return serverName;
}