From 97f9d10c9f7ae5f193d75dd8ca8d16ee8dedc9c4 Mon Sep 17 00:00:00 2001
From: AaronLin <1546848781@qq.com>
Date: Sun, 22 Aug 2021 17:09:47 +0800
Subject: [PATCH] =?UTF-8?q?=E5=9F=BA=E4=BA=8E=E6=95=B0=E6=8D=AE=E5=BA=93?=
=?UTF-8?q?=E7=9A=84=E8=AE=A4=E8=AF=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 10 +++
readme.md | 6 +-
.../config/SecurityConfig.java | 10 +++
.../_01springsecuritydemo01/dao/UserDao.java | 10 +++
.../_01springsecuritydemo01/entity/User.java | 80 +++++++++++++++++++
.../service/UserDetailService.java | 27 +++++++
.../service/UserService.java | 7 ++
.../service/UserServiceImpl.java | 24 ++++++
src/main/resources/application.properties | 6 +-
9 files changed, 178 insertions(+), 2 deletions(-)
create mode 100644 src/main/java/com/al/_01springsecuritydemo01/dao/UserDao.java
create mode 100644 src/main/java/com/al/_01springsecuritydemo01/entity/User.java
create mode 100644 src/main/java/com/al/_01springsecuritydemo01/service/UserDetailService.java
create mode 100644 src/main/java/com/al/_01springsecuritydemo01/service/UserService.java
create mode 100644 src/main/java/com/al/_01springsecuritydemo01/service/UserServiceImpl.java
diff --git a/pom.xml b/pom.xml
index 96abc55..c966296 100644
--- a/pom.xml
+++ b/pom.xml
@@ -49,6 +49,16 @@
spring-security-test
test
+
+
+ mysql
+ mysql-connector-java
+ runtime
+
+
+ org.springframework.boot
+ spring-boot-starter-data-jpa
+
diff --git a/readme.md b/readme.md
index 37ccfbe..0d28f4d 100644
--- a/readme.md
+++ b/readme.md
@@ -1,4 +1,8 @@
端口:8081
[http://localhost:8081](http://localhost:8081])
-表单登录地址:http://localhost:8081/login.html
\ No newline at end of file
+表单登录地址:http://localhost:8081/login.html
+
+账号:admin,user
+
+密码:1234
\ No newline at end of file
diff --git a/src/main/java/com/al/_01springsecuritydemo01/config/SecurityConfig.java b/src/main/java/com/al/_01springsecuritydemo01/config/SecurityConfig.java
index 4026f71..c7f4223 100644
--- a/src/main/java/com/al/_01springsecuritydemo01/config/SecurityConfig.java
+++ b/src/main/java/com/al/_01springsecuritydemo01/config/SecurityConfig.java
@@ -11,6 +11,8 @@
import org.springframework.security.web.authentication.AuthenticationFailureHandler;
import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
+import com.al._01springsecuritydemo01.service.UserDetailService;
+
@EnableWebSecurity
// @Configuration 被包括在上面的注解了
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@@ -20,6 +22,9 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private AuthenticationFailureHandler failureHandler;
+ @Autowired
+ private UserDetailService userDetailService;
+
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
@@ -57,6 +62,10 @@ protected void configure(HttpSecurity http) throws Exception {
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
+ auth.userDetailsService(userDetailService)
+ .passwordEncoder(passwordEncoder());
+ System.out.println(passwordEncoder().encode("1234"));
+ /*
auth.inMemoryAuthentication()
.withUser("user")
.password(passwordEncoder().encode("1234"))
@@ -70,5 +79,6 @@ protected void configure(AuthenticationManagerBuilder auth) throws Exception {
.and()
.passwordEncoder(passwordEncoder());
;
+ */
}
}
diff --git a/src/main/java/com/al/_01springsecuritydemo01/dao/UserDao.java b/src/main/java/com/al/_01springsecuritydemo01/dao/UserDao.java
new file mode 100644
index 0000000..5d91942
--- /dev/null
+++ b/src/main/java/com/al/_01springsecuritydemo01/dao/UserDao.java
@@ -0,0 +1,10 @@
+package com.al._01springsecuritydemo01.dao;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+import com.al._01springsecuritydemo01.entity.User;
+
+@Repository
+public interface UserDao extends JpaRepository {
+}
diff --git a/src/main/java/com/al/_01springsecuritydemo01/entity/User.java b/src/main/java/com/al/_01springsecuritydemo01/entity/User.java
new file mode 100644
index 0000000..8624b38
--- /dev/null
+++ b/src/main/java/com/al/_01springsecuritydemo01/entity/User.java
@@ -0,0 +1,80 @@
+package com.al._01springsecuritydemo01.entity;
+
+import java.util.Collection;
+import java.util.List;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.core.userdetails.UserDetails;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Entity
+@Table(name = "users")
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class User implements UserDetails {
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @Column
+ private Long userId;
+
+ @Column(name = "user_name")
+ private String userName;
+
+ @Column(name = "password")
+ private String password;
+
+ @Column(name = "status")
+ private String status;
+
+ @Column(name = "roles")
+ private String roles;
+
+ @Transient
+ private List authorities;
+
+ public void setAuthorities(List authorities) {
+ this.authorities = authorities;
+ }
+
+ @Override
+ public Collection extends GrantedAuthority> getAuthorities() {
+ return this.authorities;
+ }
+
+ @Override
+ public String getUsername() {
+ return this.userName;
+ }
+
+ @Override
+ public boolean isAccountNonExpired() {
+ return true;
+ }
+
+ @Override
+ public boolean isAccountNonLocked() {
+ return true;
+ }
+
+ @Override
+ public boolean isCredentialsNonExpired() {
+ return true;
+ }
+
+ @Override
+ public boolean isEnabled() {
+ return true;
+ }
+}
diff --git a/src/main/java/com/al/_01springsecuritydemo01/service/UserDetailService.java b/src/main/java/com/al/_01springsecuritydemo01/service/UserDetailService.java
new file mode 100644
index 0000000..b32d84b
--- /dev/null
+++ b/src/main/java/com/al/_01springsecuritydemo01/service/UserDetailService.java
@@ -0,0 +1,27 @@
+package com.al._01springsecuritydemo01.service;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.core.authority.AuthorityUtils;
+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.Service;
+
+import com.al._01springsecuritydemo01.entity.User;
+
+@Service
+public class UserDetailService implements UserDetailsService {
+ @Autowired
+ private UserService userService;
+
+ @Override
+ public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
+ User user = userService.selectUserByUserName(username);
+ if (user == null) {
+ throw new UsernameNotFoundException("用户" + user.getUsername() + "不存在");
+ }
+ // 设置权限
+ user.setAuthorities(AuthorityUtils.commaSeparatedStringToAuthorityList(user.getRoles()));
+ return user;
+ }
+}
diff --git a/src/main/java/com/al/_01springsecuritydemo01/service/UserService.java b/src/main/java/com/al/_01springsecuritydemo01/service/UserService.java
new file mode 100644
index 0000000..df6f989
--- /dev/null
+++ b/src/main/java/com/al/_01springsecuritydemo01/service/UserService.java
@@ -0,0 +1,7 @@
+package com.al._01springsecuritydemo01.service;
+
+import com.al._01springsecuritydemo01.entity.User;
+
+public interface UserService {
+ public User selectUserByUserName(String username);
+}
diff --git a/src/main/java/com/al/_01springsecuritydemo01/service/UserServiceImpl.java b/src/main/java/com/al/_01springsecuritydemo01/service/UserServiceImpl.java
new file mode 100644
index 0000000..a6b6b80
--- /dev/null
+++ b/src/main/java/com/al/_01springsecuritydemo01/service/UserServiceImpl.java
@@ -0,0 +1,24 @@
+package com.al._01springsecuritydemo01.service;
+
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Example;
+import org.springframework.stereotype.Service;
+
+import com.al._01springsecuritydemo01.dao.UserDao;
+import com.al._01springsecuritydemo01.entity.User;
+
+@Service
+public class UserServiceImpl implements UserService {
+ @Autowired
+ private UserDao userDao;
+
+ @Override
+ public User selectUserByUserName(String username) {
+ User user = new User();
+ user.setUserName(username);
+ List list = userDao.findAll(Example.of(user));
+ return list.isEmpty() ? null : list.get(0);
+ }
+}
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index bafddce..30ba351 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -1 +1,5 @@
-server.port=8081
\ No newline at end of file
+server.port=8081
+spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
+spring.datasource.username=root
+spring.datasource.password=1234
+spring.datasource.url=jdbc:mysql://localhost:3306/jwt_demo?serverTimezone=GMT%2B8&characterEncoding=utf-8
\ No newline at end of file