Skip to content

Commit

Permalink
基于数据库的认证
Browse files Browse the repository at this point in the history
  • Loading branch information
aaronlinv committed Aug 22, 2021
1 parent d2badb8 commit 97f9d10
Show file tree
Hide file tree
Showing 9 changed files with 178 additions and 2 deletions.
10 changes: 10 additions & 0 deletions pom.xml
Expand Up @@ -49,6 +49,16 @@
<artifactId>spring-security-test</artifactId>
<scope>test</scope>
</dependency>

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
</dependencies>

<build>
Expand Down
6 changes: 5 additions & 1 deletion readme.md
@@ -1,4 +1,8 @@
端口:8081
[http://localhost:8081](http://localhost:8081])

表单登录地址:http://localhost:8081/login.html
表单登录地址:http://localhost:8081/login.html

账号:admin,user

密码:1234
Expand Up @@ -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 {
Expand All @@ -20,6 +22,9 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private AuthenticationFailureHandler failureHandler;

@Autowired
private UserDetailService userDetailService;

@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
Expand Down Expand Up @@ -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"))
Expand All @@ -70,5 +79,6 @@ protected void configure(AuthenticationManagerBuilder auth) throws Exception {
.and()
.passwordEncoder(passwordEncoder());
;
*/
}
}
10 changes: 10 additions & 0 deletions 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<User, Long> {
}
80 changes: 80 additions & 0 deletions 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<GrantedAuthority> authorities;

public void setAuthorities(List<GrantedAuthority> 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;
}
}
@@ -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;
}
}
@@ -0,0 +1,7 @@
package com.al._01springsecuritydemo01.service;

import com.al._01springsecuritydemo01.entity.User;

public interface UserService {
public User selectUserByUserName(String username);
}
@@ -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<User> list = userDao.findAll(Example.of(user));
return list.isEmpty() ? null : list.get(0);
}
}
6 changes: 5 additions & 1 deletion src/main/resources/application.properties
@@ -1 +1,5 @@
server.port=8081
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

0 comments on commit 97f9d10

Please sign in to comment.