From 2621e0302071a391ee1679f446a8f58d817c1e3e Mon Sep 17 00:00:00 2001
From: bunny <1319900154@qq.com>
Date: Wed, 24 Apr 2024 16:12:43 +0800
Subject: [PATCH] =?UTF-8?q?feat(=E6=96=B0=E5=A2=9E):=20:rocket:=20?=
=?UTF-8?q?=E5=AE=89=E5=85=A8=E6=A1=86=E6=9E=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.idea/compiler.xml | 2 +
.idea/encodings.xml | 1 +
.../atguigu/common/result/ResultCodeEnum.java | 2 +-
.../atguigu/common/utlis/ResponseUtil.java | 23 ++++
common/spring-security/pom.xml | 37 +++++++
.../custom/CustomMd5PasswordEncoder.java | 16 +++
.../atguigu/security/custom/CustomUser.java | 27 +++++
.../security/custom/UserDetailsService.java | 11 ++
.../fillter/TokenAuthenticationFilter.java | 81 ++++++++++++++
logs/service-oa/spring.log | 100 ++++++++++++++++++
pom.xml | 1 +
service-oa/pom.xml | 5 +
.../atguigu/auth/service/SysUserService.java | 8 ++
.../auth/service/impl/SysUserServiceImpl.java | 12 +++
.../service/impl/UserDetailsServiceImpl.java | 34 ++++++
15 files changed, 359 insertions(+), 1 deletion(-)
create mode 100644 common/common-util/src/main/java/com/atguigu/common/utlis/ResponseUtil.java
create mode 100644 common/spring-security/pom.xml
create mode 100644 common/spring-security/src/main/java/com/atguigu/security/custom/CustomMd5PasswordEncoder.java
create mode 100644 common/spring-security/src/main/java/com/atguigu/security/custom/CustomUser.java
create mode 100644 common/spring-security/src/main/java/com/atguigu/security/custom/UserDetailsService.java
create mode 100644 common/spring-security/src/main/java/com/atguigu/security/fillter/TokenAuthenticationFilter.java
create mode 100644 service-oa/src/main/java/com/atguigu/auth/service/impl/UserDetailsServiceImpl.java
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
index c456808..6499e56 100644
--- a/.idea/compiler.xml
+++ b/.idea/compiler.xml
@@ -7,6 +7,7 @@
+
@@ -22,6 +23,7 @@
+
\ No newline at end of file
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
index 3b9ee06..b902923 100644
--- a/.idea/encodings.xml
+++ b/.idea/encodings.xml
@@ -7,6 +7,7 @@
+
diff --git a/common/common-util/src/main/java/com/atguigu/common/result/ResultCodeEnum.java b/common/common-util/src/main/java/com/atguigu/common/result/ResultCodeEnum.java
index 5318a97..6b3873c 100644
--- a/common/common-util/src/main/java/com/atguigu/common/result/ResultCodeEnum.java
+++ b/common/common-util/src/main/java/com/atguigu/common/result/ResultCodeEnum.java
@@ -14,7 +14,7 @@ public enum ResultCodeEnum {
DATA_ERROR(204, "数据异常"),
LOGIN_AUTH(208, "未登陆"),
- PERMISSION(209, "没有权限");
+ PERMISSION(209, "没有权限"), LOGIN_MOBLE_ERROR(204, "登录错误");
private final Integer code;
private final String message;
diff --git a/common/common-util/src/main/java/com/atguigu/common/utlis/ResponseUtil.java b/common/common-util/src/main/java/com/atguigu/common/utlis/ResponseUtil.java
new file mode 100644
index 0000000..db0e1a0
--- /dev/null
+++ b/common/common-util/src/main/java/com/atguigu/common/utlis/ResponseUtil.java
@@ -0,0 +1,23 @@
+package com.atguigu.common.utlis;
+
+import com.atguigu.common.result.Result;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+public class ResponseUtil {
+
+ public static void out(HttpServletResponse response, Result r) {
+ ObjectMapper mapper = new ObjectMapper();
+ response.setStatus(HttpStatus.OK.value());
+ response.setContentType(MediaType.APPLICATION_JSON_UTF8_VALUE);
+ try {
+ mapper.writeValue(response.getWriter(), r);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+}
\ No newline at end of file
diff --git a/common/spring-security/pom.xml b/common/spring-security/pom.xml
new file mode 100644
index 0000000..2c25f4a
--- /dev/null
+++ b/common/spring-security/pom.xml
@@ -0,0 +1,37 @@
+
+ 4.0.0
+
+ com.atguigu
+ common
+ 1.0-SNAPSHOT
+
+
+ spring-security
+ jar
+
+ spring-security
+ https://maven.apache.org
+
+
+ UTF-8
+
+
+
+
+ com.atguigu
+ common-util
+ 1.0-SNAPSHOT
+
+
+
+ org.springframework.boot
+ spring-boot-starter-security
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+ provided
+
+
+
diff --git a/common/spring-security/src/main/java/com/atguigu/security/custom/CustomMd5PasswordEncoder.java b/common/spring-security/src/main/java/com/atguigu/security/custom/CustomMd5PasswordEncoder.java
new file mode 100644
index 0000000..c96600f
--- /dev/null
+++ b/common/spring-security/src/main/java/com/atguigu/security/custom/CustomMd5PasswordEncoder.java
@@ -0,0 +1,16 @@
+package com.atguigu.security.custom;
+
+import org.springframework.security.crypto.password.PasswordEncoder;
+import org.springframework.stereotype.Component;
+import org.springframework.util.DigestUtils;
+
+@Component
+public class CustomMd5PasswordEncoder implements PasswordEncoder {
+ public String encode(CharSequence rawPassword) {
+ return DigestUtils.md5DigestAsHex(rawPassword.toString().getBytes());
+ }
+
+ public boolean matches(CharSequence rawPassword, String encodedPassword) {
+ return encodedPassword.equals(DigestUtils.md5DigestAsHex(rawPassword.toString().getBytes()));
+ }
+}
\ No newline at end of file
diff --git a/common/spring-security/src/main/java/com/atguigu/security/custom/CustomUser.java b/common/spring-security/src/main/java/com/atguigu/security/custom/CustomUser.java
new file mode 100644
index 0000000..8daf94b
--- /dev/null
+++ b/common/spring-security/src/main/java/com/atguigu/security/custom/CustomUser.java
@@ -0,0 +1,27 @@
+package com.atguigu.security.custom;
+
+import com.atguigu.model.system.SysUser;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.core.userdetails.User;
+
+import java.util.Collection;
+
+public class CustomUser extends User {
+ /**
+ * 我们自己的用户实体对象,要调取用户信息时直接获取这个实体对象。(这里我就不写get/set方法了)
+ */
+ private SysUser sysUser;
+
+ public CustomUser(SysUser sysUser, Collection extends GrantedAuthority> authorities) {
+ super(sysUser.getUsername(), sysUser.getPassword(), authorities);
+ this.sysUser = sysUser;
+ }
+
+ public SysUser getSysUser() {
+ return sysUser;
+ }
+
+ public void setSysUser(SysUser sysUser) {
+ this.sysUser = sysUser;
+ }
+}
\ No newline at end of file
diff --git a/common/spring-security/src/main/java/com/atguigu/security/custom/UserDetailsService.java b/common/spring-security/src/main/java/com/atguigu/security/custom/UserDetailsService.java
new file mode 100644
index 0000000..e075215
--- /dev/null
+++ b/common/spring-security/src/main/java/com/atguigu/security/custom/UserDetailsService.java
@@ -0,0 +1,11 @@
+package com.atguigu.security.custom;
+
+import org.springframework.security.core.userdetails.UserDetails;
+import org.springframework.security.core.userdetails.UsernameNotFoundException;
+
+public interface UserDetailsService {
+ /**
+ * 根据用户名获取用户对象(获取不到直接抛异常)
+ */
+ UserDetails loadUserByUsername(String username) throws UsernameNotFoundException;
+}
\ No newline at end of file
diff --git a/common/spring-security/src/main/java/com/atguigu/security/fillter/TokenAuthenticationFilter.java b/common/spring-security/src/main/java/com/atguigu/security/fillter/TokenAuthenticationFilter.java
new file mode 100644
index 0000000..7ab5990
--- /dev/null
+++ b/common/spring-security/src/main/java/com/atguigu/security/fillter/TokenAuthenticationFilter.java
@@ -0,0 +1,81 @@
+package com.atguigu.security.fillter;
+
+import com.atguigu.common.result.Result;
+import com.atguigu.common.result.ResultCodeEnum;
+import com.atguigu.common.utlis.JwtHelper;
+import com.atguigu.common.utlis.ResponseUtil;
+import com.atguigu.security.custom.CustomUser;
+import com.atguigu.vo.system.LoginVo;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.springframework.security.authentication.AuthenticationManager;
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.AuthenticationException;
+import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
+import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
+
+import javax.servlet.FilterChain;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ *
+ * 登录过滤器,继承UsernamePasswordAuthenticationFilter,对用户名密码进行登录校验
+ *
+ */
+public class TokenAuthenticationFilter extends UsernamePasswordAuthenticationFilter {
+ public TokenAuthenticationFilter(AuthenticationManager authenticationManager) {
+ this.setAuthenticationManager(authenticationManager);
+ this.setPostOnly(false);
+ // 指定登录接口及提交方式,可以指定任意路径
+ this.setRequiresAuthenticationRequestMatcher(new AntPathRequestMatcher("/admin/system/index/login", "POST"));
+ }
+
+ /**
+ * 登录认证
+ */
+ @Override
+ public Authentication attemptAuthentication(HttpServletRequest req, HttpServletResponse res)
+ throws AuthenticationException {
+ try {
+ LoginVo loginVo = new ObjectMapper().readValue(req.getInputStream(), LoginVo.class);
+
+ Authentication authenticationToken = new UsernamePasswordAuthenticationToken(loginVo.getUsername(), loginVo.getPassword());
+ return this.getAuthenticationManager().authenticate(authenticationToken);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+
+ }
+
+ /**
+ * 登录成功
+ */
+ @Override
+ protected void successfulAuthentication(HttpServletRequest request, HttpServletResponse response, FilterChain chain,
+ Authentication auth) throws IOException, ServletException {
+ CustomUser customUser = (CustomUser) auth.getPrincipal();
+ String token = JwtHelper.createToken(customUser.getSysUser().getId(), customUser.getSysUser().getUsername());
+
+ Map map = new HashMap<>();
+ map.put("token", token);
+ ResponseUtil.out(response, Result.success(map));
+ }
+
+ /**
+ * 登录失败
+ */
+ @Override
+ protected void unsuccessfulAuthentication(HttpServletRequest request, HttpServletResponse response,
+ AuthenticationException e) {
+ if (e.getCause() instanceof RuntimeException) {
+ ResponseUtil.out(response, Result.error(null, 204, e.getMessage()));
+ } else {
+ ResponseUtil.out(response, Result.error(null, ResultCodeEnum.LOGIN_MOBLE_ERROR));
+ }
+ }
+}
\ No newline at end of file
diff --git a/logs/service-oa/spring.log b/logs/service-oa/spring.log
index fc64760..761fdfe 100644
--- a/logs/service-oa/spring.log
+++ b/logs/service-oa/spring.log
@@ -305,3 +305,103 @@
14:15:45:080 INFO 20408 --- [http-nio-8800-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
14:15:45:084 INFO 20408 --- [http-nio-8800-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 4 ms
14:16:25:662 INFO 20408 --- [SpringContextShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService 'applicationTaskExecutor'
+14:16:28:044 INFO 13272 --- [main] com.atguigu.auth.ServiceAuthApplication : Starting ServiceAuthApplication on Bunny with PID 13272 (F:\java项目\guigu-oa\guigu-oa\service-oa\target\classes started by ACE in F:\java项目\guigu-oa\guigu-oa)
+14:16:28:046 INFO 13272 --- [main] com.atguigu.auth.ServiceAuthApplication : The following profiles are active: dev
+14:16:28:861 INFO 13272 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8800 (http)
+14:16:28:869 INFO 13272 --- [main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
+14:16:28:869 INFO 13272 --- [main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.39]
+14:16:28:931 INFO 13272 --- [main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
+14:16:28:932 INFO 13272 --- [main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 851 ms
+14:16:29:032 INFO 13272 --- [main] com.atguigu.config.MybatisPlusConfig : 注入MybatisPlus配置类...
+14:16:29:602 INFO 13272 --- [main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
+14:16:29:743 INFO 13272 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8800 (http) with context path ''
+14:16:30:017 INFO 13272 --- [main] com.atguigu.auth.ServiceAuthApplication : Started ServiceAuthApplication in 2.232 seconds (JVM running for 2.626)
+14:16:33:582 INFO 13272 --- [http-nio-8800-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
+14:16:33:582 INFO 13272 --- [http-nio-8800-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
+14:16:33:585 INFO 13272 --- [http-nio-8800-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 3 ms
+14:16:33:615 INFO 13272 --- [http-nio-8800-exec-1] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
+14:16:33:850 INFO 13272 --- [http-nio-8800-exec-1] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
+14:16:33:908 ERROR 13272 --- [http-nio-8800-exec-1] c.a.exception.GlobalExceptionHandler : GlobalExceptionHandler===>自定义异常信息:用户不存在
+14:49:35:578 INFO 13272 --- [SpringContextShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService 'applicationTaskExecutor'
+14:49:35:579 INFO 13272 --- [SpringContextShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated...
+14:49:35:581 INFO 13272 --- [SpringContextShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed.
+14:49:40:028 INFO 26124 --- [main] com.atguigu.auth.ServiceAuthApplication : Starting ServiceAuthApplication on Bunny with PID 26124 (F:\java项目\guigu-oa\guigu-oa\service-oa\target\classes started by ACE in F:\java项目\guigu-oa\guigu-oa)
+14:49:40:030 INFO 26124 --- [main] com.atguigu.auth.ServiceAuthApplication : The following profiles are active: dev
+14:49:40:939 INFO 26124 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8800 (http)
+14:49:40:950 INFO 26124 --- [main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
+14:49:40:951 INFO 26124 --- [main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.39]
+14:49:41:016 INFO 26124 --- [main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
+14:49:41:016 INFO 26124 --- [main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 948 ms
+14:49:41:117 INFO 26124 --- [main] com.atguigu.config.MybatisPlusConfig : 注入MybatisPlus配置类...
+14:49:41:710 INFO 26124 --- [main] .s.s.UserDetailsServiceAutoConfiguration :
+
+Using generated security password: 22e6691e-e731-4b1b-bbb7-49c861afe133
+
+14:49:41:792 INFO 26124 --- [main] o.s.s.web.DefaultSecurityFilterChain : Creating filter chain: any request, [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@2e1ba142, org.springframework.security.web.context.SecurityContextPersistenceFilter@1cc93da4, org.springframework.security.web.header.HeaderWriterFilter@35e689a0, org.springframework.security.web.csrf.CsrfFilter@280d5a82, org.springframework.security.web.authentication.logout.LogoutFilter@19647566, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@7769d9b6, org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter@273293c8, org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter@abc7005, org.springframework.security.web.authentication.www.BasicAuthenticationFilter@7878bbdb, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@7e38e254, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@17136390, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@595ec862, org.springframework.security.web.session.SessionManagementFilter@3bf5911d, org.springframework.security.web.access.ExceptionTranslationFilter@64f3991e, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@3b33fff9]
+14:49:41:845 INFO 26124 --- [main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
+14:49:41:999 INFO 26124 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8800 (http) with context path ''
+14:49:42:269 INFO 26124 --- [main] com.atguigu.auth.ServiceAuthApplication : Started ServiceAuthApplication in 2.505 seconds (JVM running for 2.966)
+14:51:02:789 INFO 26124 --- [http-nio-8800-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
+14:51:02:789 INFO 26124 --- [http-nio-8800-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
+14:51:02:793 INFO 26124 --- [http-nio-8800-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 4 ms
+14:52:05:584 INFO 26124 --- [SpringContextShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService 'applicationTaskExecutor'
+14:52:08:294 INFO 28940 --- [main] com.atguigu.auth.ServiceAuthApplication : Starting ServiceAuthApplication on Bunny with PID 28940 (F:\java项目\guigu-oa\guigu-oa\service-oa\target\classes started by ACE in F:\java项目\guigu-oa\guigu-oa)
+14:52:08:296 INFO 28940 --- [main] com.atguigu.auth.ServiceAuthApplication : The following profiles are active: dev
+14:52:09:241 INFO 28940 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8800 (http)
+14:52:09:248 INFO 28940 --- [main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
+14:52:09:248 INFO 28940 --- [main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.39]
+14:52:09:312 INFO 28940 --- [main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
+14:52:09:312 INFO 28940 --- [main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 977 ms
+14:52:09:429 INFO 28940 --- [main] com.atguigu.config.MybatisPlusConfig : 注入MybatisPlus配置类...
+14:52:10:030 INFO 28940 --- [main] .s.s.UserDetailsServiceAutoConfiguration :
+
+Using generated security password: ae2ed156-c680-449d-ad9e-71583c31ef54
+
+14:52:10:100 INFO 28940 --- [main] o.s.s.web.DefaultSecurityFilterChain : Creating filter chain: any request, [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@53e28097, org.springframework.security.web.context.SecurityContextPersistenceFilter@35e689a0, org.springframework.security.web.header.HeaderWriterFilter@21a5b599, org.springframework.security.web.csrf.CsrfFilter@59f3426f, org.springframework.security.web.authentication.logout.LogoutFilter@3041beb3, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@fd87c22, org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter@6dcbbb49, org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter@6e794f53, org.springframework.security.web.authentication.www.BasicAuthenticationFilter@4ca0b9b1, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@3bf5911d, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@69a90b81, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@75f4d8a8, org.springframework.security.web.session.SessionManagementFilter@64f3991e, org.springframework.security.web.access.ExceptionTranslationFilter@1de08775, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@500ec769]
+14:52:10:151 INFO 28940 --- [main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
+14:52:10:297 INFO 28940 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8800 (http) with context path ''
+14:52:10:570 INFO 28940 --- [main] com.atguigu.auth.ServiceAuthApplication : Started ServiceAuthApplication in 2.611 seconds (JVM running for 3.178)
+14:52:12:610 INFO 28940 --- [http-nio-8800-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
+14:52:12:611 INFO 28940 --- [http-nio-8800-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
+14:52:12:614 INFO 28940 --- [http-nio-8800-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 3 ms
+14:53:24:672 INFO 28940 --- [SpringContextShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService 'applicationTaskExecutor'
+14:53:27:344 INFO 9704 --- [main] com.atguigu.auth.ServiceAuthApplication : Starting ServiceAuthApplication on Bunny with PID 9704 (F:\java项目\guigu-oa\guigu-oa\service-oa\target\classes started by ACE in F:\java项目\guigu-oa\guigu-oa)
+14:53:27:346 INFO 9704 --- [main] com.atguigu.auth.ServiceAuthApplication : The following profiles are active: dev
+14:53:28:360 INFO 9704 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8800 (http)
+14:53:28:367 INFO 9704 --- [main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
+14:53:28:367 INFO 9704 --- [main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.39]
+14:53:28:444 INFO 9704 --- [main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
+14:53:28:445 INFO 9704 --- [main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1046 ms
+14:53:28:560 INFO 9704 --- [main] com.atguigu.config.MybatisPlusConfig : 注入MybatisPlus配置类...
+14:53:29:142 INFO 9704 --- [main] .s.s.UserDetailsServiceAutoConfiguration :
+
+Using generated security password: 8096bafc-491c-41f3-80b4-f6829ee2cb99
+
+14:53:29:209 INFO 9704 --- [main] o.s.s.web.DefaultSecurityFilterChain : Creating filter chain: any request, [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@102af1bb, org.springframework.security.web.context.SecurityContextPersistenceFilter@2e4ecdf8, org.springframework.security.web.header.HeaderWriterFilter@1cc93da4, org.springframework.security.web.csrf.CsrfFilter@6efd0a6e, org.springframework.security.web.authentication.logout.LogoutFilter@2335aef2, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@5af38a4a, org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter@333e5fb6, org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter@797f97e3, org.springframework.security.web.authentication.www.BasicAuthenticationFilter@6e794f53, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@69a90b81, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@a120b9, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@56cd5d76, org.springframework.security.web.session.SessionManagementFilter@7e38e254, org.springframework.security.web.access.ExceptionTranslationFilter@3bf5911d, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@3b9c9b8b]
+14:53:29:261 INFO 9704 --- [main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
+14:53:29:412 INFO 9704 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8800 (http) with context path ''
+14:53:29:684 INFO 9704 --- [main] com.atguigu.auth.ServiceAuthApplication : Started ServiceAuthApplication in 2.756 seconds (JVM running for 3.209)
+14:53:47:436 INFO 9704 --- [http-nio-8800-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
+14:53:47:437 INFO 9704 --- [http-nio-8800-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
+14:53:47:440 INFO 9704 --- [http-nio-8800-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 3 ms
+14:54:12:750 INFO 9704 --- [SpringContextShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService 'applicationTaskExecutor'
+14:54:14:216 INFO 16348 --- [main] com.atguigu.auth.ServiceAuthApplication : Starting ServiceAuthApplication on Bunny with PID 16348 (F:\java项目\guigu-oa\guigu-oa\service-oa\target\classes started by ACE in F:\java项目\guigu-oa\guigu-oa)
+14:54:14:218 INFO 16348 --- [main] com.atguigu.auth.ServiceAuthApplication : The following profiles are active: dev
+14:54:15:134 INFO 16348 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8800 (http)
+14:54:15:141 INFO 16348 --- [main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
+14:54:15:142 INFO 16348 --- [main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.39]
+14:54:15:202 INFO 16348 --- [main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
+14:54:15:202 INFO 16348 --- [main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 947 ms
+14:54:15:319 INFO 16348 --- [main] com.atguigu.config.MybatisPlusConfig : 注入MybatisPlus配置类...
+14:54:15:938 INFO 16348 --- [main] .s.s.UserDetailsServiceAutoConfiguration :
+
+Using generated security password: c1b9b421-40ec-420f-88cd-c249c5d26684
+
+14:54:16:006 INFO 16348 --- [main] o.s.s.web.DefaultSecurityFilterChain : Creating filter chain: any request, [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@75f4d8a8, org.springframework.security.web.context.SecurityContextPersistenceFilter@3bf5911d, org.springframework.security.web.header.HeaderWriterFilter@64f3991e, org.springframework.security.web.csrf.CsrfFilter@6cc8adff, org.springframework.security.web.authentication.logout.LogoutFilter@2e40fdbd, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@1ff463bb, org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter@36c783ca, org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter@69ba72da, org.springframework.security.web.authentication.www.BasicAuthenticationFilter@1be77a76, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@1cc93da4, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@35329a05, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@2e1ba142, org.springframework.security.web.session.SessionManagementFilter@35e689a0, org.springframework.security.web.access.ExceptionTranslationFilter@21a5b599, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@7bce9ce4]
+14:54:16:058 INFO 16348 --- [main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
+14:54:16:203 INFO 16348 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8800 (http) with context path ''
+14:54:16:485 INFO 16348 --- [main] com.atguigu.auth.ServiceAuthApplication : Started ServiceAuthApplication in 2.538 seconds (JVM running for 2.963)
+14:54:25:577 INFO 16348 --- [http-nio-8800-exec-4] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
+14:54:25:578 INFO 16348 --- [http-nio-8800-exec-4] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
+14:54:25:583 INFO 16348 --- [http-nio-8800-exec-4] o.s.web.servlet.DispatcherServlet : Completed initialization in 5 ms
+16:12:27:427 INFO 16348 --- [SpringContextShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService 'applicationTaskExecutor'
diff --git a/pom.xml b/pom.xml
index e29af07..2e39451 100644
--- a/pom.xml
+++ b/pom.xml
@@ -18,6 +18,7 @@
common
model
service-oa
+ common/spring-security
diff --git a/service-oa/pom.xml b/service-oa/pom.xml
index 2f0d8f9..cbc5d4d 100644
--- a/service-oa/pom.xml
+++ b/service-oa/pom.xml
@@ -28,6 +28,11 @@
service-util
1.0-SNAPSHOT
+
+ com.atguigu
+ spring-security
+ 1.0-SNAPSHOT
+
org.springframework.boot
diff --git a/service-oa/src/main/java/com/atguigu/auth/service/SysUserService.java b/service-oa/src/main/java/com/atguigu/auth/service/SysUserService.java
index 9faae3f..59394c1 100644
--- a/service-oa/src/main/java/com/atguigu/auth/service/SysUserService.java
+++ b/service-oa/src/main/java/com/atguigu/auth/service/SysUserService.java
@@ -53,4 +53,12 @@ public interface SysUserService extends IService {
* @return 用户信息
*/
SysUserinfo getUserinfo(HttpServletRequest request);
+
+ /**
+ * 根据用户名查询用户信息
+ *
+ * @param username 用户名
+ * @return 用户信息
+ */
+ SysUser getByUsername(String username);
}
diff --git a/service-oa/src/main/java/com/atguigu/auth/service/impl/SysUserServiceImpl.java b/service-oa/src/main/java/com/atguigu/auth/service/impl/SysUserServiceImpl.java
index 33b7ce2..7c7e180 100644
--- a/service-oa/src/main/java/com/atguigu/auth/service/impl/SysUserServiceImpl.java
+++ b/service-oa/src/main/java/com/atguigu/auth/service/impl/SysUserServiceImpl.java
@@ -14,6 +14,7 @@ import com.atguigu.vo.system.RouterVo;
import com.atguigu.vo.system.SysUserQueryVo;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
@@ -147,4 +148,15 @@ public class SysUserServiceImpl extends ServiceImpl impl
.routers(routerVoList)
.build();
}
+
+ /**
+ * 根据用户名查询用户信息
+ *
+ * @param username 用户名
+ * @return 用户信息
+ */
+ @Override
+ public SysUser getByUsername(String username) {
+ return getOne(Wrappers.lambdaQuery().eq(SysUser::getUsername, username));
+ }
}
diff --git a/service-oa/src/main/java/com/atguigu/auth/service/impl/UserDetailsServiceImpl.java b/service-oa/src/main/java/com/atguigu/auth/service/impl/UserDetailsServiceImpl.java
new file mode 100644
index 0000000..64460ad
--- /dev/null
+++ b/service-oa/src/main/java/com/atguigu/auth/service/impl/UserDetailsServiceImpl.java
@@ -0,0 +1,34 @@
+package com.atguigu.auth.service.impl;
+
+import com.atguigu.auth.service.SysUserService;
+import com.atguigu.constant.MessageConstant;
+import com.atguigu.exception.BunnyException;
+import com.atguigu.model.system.SysUser;
+import com.atguigu.security.custom.CustomUser;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.core.userdetails.UserDetails;
+import org.springframework.security.core.userdetails.UserDetailsService;
+import org.springframework.security.core.userdetails.UsernameNotFoundException;
+import org.springframework.stereotype.Component;
+
+import java.util.Collections;
+
+@Component
+public class UserDetailsServiceImpl implements UserDetailsService {
+ @Autowired
+ private SysUserService sysUserService;
+
+ @Override
+ public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
+ SysUser sysUser = sysUserService.getByUsername(username);
+ if (null == sysUser) {
+ throw new UsernameNotFoundException(MessageConstant.USER_DOES_NOT_EXIST);
+ }
+
+ if (sysUser.getStatus() == 0) {
+ throw new BunnyException(MessageConstant.ACCOUNT_LOCKED);
+ }
+
+ return new CustomUser(sysUser, Collections.emptyList());
+ }
+}
\ No newline at end of file