commit
91ecd20f66
12 changed files with 407 additions and 0 deletions
@ -0,0 +1,33 @@ |
|||||||
|
HELP.md |
||||||
|
target/ |
||||||
|
!.mvn/wrapper/maven-wrapper.jar |
||||||
|
!**/src/main/**/target/ |
||||||
|
!**/src/test/**/target/ |
||||||
|
|
||||||
|
### STS ### |
||||||
|
.apt_generated |
||||||
|
.classpath |
||||||
|
.factorypath |
||||||
|
.project |
||||||
|
.settings |
||||||
|
.springBeans |
||||||
|
.sts4-cache |
||||||
|
|
||||||
|
### IntelliJ IDEA ### |
||||||
|
.idea |
||||||
|
*.iws |
||||||
|
*.iml |
||||||
|
*.ipr |
||||||
|
|
||||||
|
### NetBeans ### |
||||||
|
/nbproject/private/ |
||||||
|
/nbbuild/ |
||||||
|
/dist/ |
||||||
|
/nbdist/ |
||||||
|
/.nb-gradle/ |
||||||
|
build/ |
||||||
|
!**/src/main/**/build/ |
||||||
|
!**/src/test/**/build/ |
||||||
|
|
||||||
|
### VS Code ### |
||||||
|
.vscode/ |
@ -0,0 +1,106 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> |
||||||
|
<modelVersion>4.0.0</modelVersion> |
||||||
|
<groupId>cc.bnblogs</groupId> |
||||||
|
<artifactId>SpringInit</artifactId> |
||||||
|
<version>0.0.1-SNAPSHOT</version> |
||||||
|
<name>SpringInit</name> |
||||||
|
<description>SpringInit</description> |
||||||
|
<properties> |
||||||
|
<java.version>1.8</java.version> |
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> |
||||||
|
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> |
||||||
|
<spring-boot.version>2.7.6</spring-boot.version> |
||||||
|
</properties> |
||||||
|
<dependencies> |
||||||
|
<dependency> |
||||||
|
<groupId>org.springframework.boot</groupId> |
||||||
|
<artifactId>spring-boot-starter-web</artifactId> |
||||||
|
</dependency> |
||||||
|
|
||||||
|
<dependency> |
||||||
|
<groupId>org.projectlombok</groupId> |
||||||
|
<artifactId>lombok</artifactId> |
||||||
|
<optional>true</optional> |
||||||
|
</dependency> |
||||||
|
|
||||||
|
<dependency> |
||||||
|
<groupId>org.springframework.boot</groupId> |
||||||
|
<artifactId>spring-boot-starter-security</artifactId> |
||||||
|
</dependency> |
||||||
|
|
||||||
|
<dependency> |
||||||
|
<groupId>org.springframework.boot</groupId> |
||||||
|
<artifactId>spring-boot-starter-test</artifactId> |
||||||
|
<scope>test</scope> |
||||||
|
</dependency> |
||||||
|
|
||||||
|
<dependency> |
||||||
|
<groupId>org.springframework.boot</groupId> |
||||||
|
<artifactId>spring-boot-starter-jdbc</artifactId> |
||||||
|
</dependency> |
||||||
|
|
||||||
|
<dependency> |
||||||
|
<groupId>com.mysql</groupId> |
||||||
|
<artifactId>mysql-connector-j</artifactId> |
||||||
|
<version>8.0.32</version> |
||||||
|
</dependency> |
||||||
|
|
||||||
|
<dependency> |
||||||
|
<groupId>com.baomidou</groupId> |
||||||
|
<artifactId>mybatis-plus-boot-starter</artifactId> |
||||||
|
<version>3.5.3.1</version> |
||||||
|
</dependency> |
||||||
|
|
||||||
|
<dependency> |
||||||
|
<groupId>com.baomidou</groupId> |
||||||
|
<artifactId>mybatis-plus-generator</artifactId> |
||||||
|
<version>3.5.3.1</version> |
||||||
|
</dependency> |
||||||
|
</dependencies> |
||||||
|
<dependencyManagement> |
||||||
|
<dependencies> |
||||||
|
<dependency> |
||||||
|
<groupId>org.springframework.boot</groupId> |
||||||
|
<artifactId>spring-boot-dependencies</artifactId> |
||||||
|
<version>${spring-boot.version}</version> |
||||||
|
<type>pom</type> |
||||||
|
<scope>import</scope> |
||||||
|
</dependency> |
||||||
|
</dependencies> |
||||||
|
</dependencyManagement> |
||||||
|
|
||||||
|
<build> |
||||||
|
<plugins> |
||||||
|
<plugin> |
||||||
|
<groupId>org.apache.maven.plugins</groupId> |
||||||
|
<artifactId>maven-compiler-plugin</artifactId> |
||||||
|
<version>3.8.1</version> |
||||||
|
<configuration> |
||||||
|
<source>1.8</source> |
||||||
|
<target>1.8</target> |
||||||
|
<encoding>UTF-8</encoding> |
||||||
|
</configuration> |
||||||
|
</plugin> |
||||||
|
<plugin> |
||||||
|
<groupId>org.springframework.boot</groupId> |
||||||
|
<artifactId>spring-boot-maven-plugin</artifactId> |
||||||
|
<version>${spring-boot.version}</version> |
||||||
|
<configuration> |
||||||
|
<mainClass>cc.bnblogs.springinit.SpringInitApplication</mainClass> |
||||||
|
<skip>true</skip> |
||||||
|
</configuration> |
||||||
|
<executions> |
||||||
|
<execution> |
||||||
|
<id>repackage</id> |
||||||
|
<goals> |
||||||
|
<goal>repackage</goal> |
||||||
|
</goals> |
||||||
|
</execution> |
||||||
|
</executions> |
||||||
|
</plugin> |
||||||
|
</plugins> |
||||||
|
</build> |
||||||
|
|
||||||
|
</project> |
@ -0,0 +1,52 @@ |
|||||||
|
package cc.bnblogs.springinit; |
||||||
|
|
||||||
|
import org.slf4j.Logger; |
||||||
|
import org.slf4j.LoggerFactory; |
||||||
|
import org.springframework.context.annotation.Bean; |
||||||
|
import org.springframework.context.annotation.Configuration; |
||||||
|
import org.springframework.security.core.authority.SimpleGrantedAuthority; |
||||||
|
import org.springframework.security.core.userdetails.User; |
||||||
|
import org.springframework.security.core.userdetails.UserDetailsService; |
||||||
|
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; |
||||||
|
import org.springframework.security.crypto.password.PasswordEncoder; |
||||||
|
import org.springframework.security.provisioning.InMemoryUserDetailsManager; |
||||||
|
|
||||||
|
import java.util.Arrays; |
||||||
|
import java.util.List; |
||||||
|
import java.util.stream.Collectors; |
||||||
|
|
||||||
|
//@Configuration
|
||||||
|
public class DemoApplicationConfiguration { |
||||||
|
|
||||||
|
private Logger logger = LoggerFactory.getLogger(DemoApplicationConfiguration.class); |
||||||
|
|
||||||
|
// @Bean
|
||||||
|
public UserDetailsService myUserDetailsService() { |
||||||
|
|
||||||
|
InMemoryUserDetailsManager inMemoryUserDetailsManager = new InMemoryUserDetailsManager(); |
||||||
|
|
||||||
|
String[][] usersGroupsAndRoles = { |
||||||
|
{ "zhangsan", "password", "ROLE_ACTIVITI_USER", "GROUP_activitiTeam" }, |
||||||
|
{ "lisi", "password", "ROLE_ACTIVITI_USER", "GROUP_activitiTeam" }, |
||||||
|
{ "wangwu", "password", "ROLE_ACTIVITI_USER", "GROUP_activitiTeam" }, |
||||||
|
{ "other", "password", "ROLE_ACTIVITI_USER", "GROUP_otherTeam" }, |
||||||
|
{ "admin", "password", "ROLE_ACTIVITI_ADMIN" }, |
||||||
|
}; |
||||||
|
|
||||||
|
for (String[] user : usersGroupsAndRoles) { |
||||||
|
List<String> authoritiesStrings = Arrays.asList(Arrays.copyOfRange(user, 2, user.length)); |
||||||
|
logger.info("> Registering new user: " + user[0] + " with the following Authorities[" + authoritiesStrings + "]"); |
||||||
|
inMemoryUserDetailsManager.createUser(new User(user[0], passwordEncoder().encode(user[1]), |
||||||
|
authoritiesStrings.stream().map(s -> new SimpleGrantedAuthority(s)).collect(Collectors.toList()))); |
||||||
|
} |
||||||
|
|
||||||
|
return inMemoryUserDetailsManager; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
// @Bean
|
||||||
|
public PasswordEncoder passwordEncoder() { |
||||||
|
return new BCryptPasswordEncoder(); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,13 @@ |
|||||||
|
package cc.bnblogs.springinit; |
||||||
|
|
||||||
|
import org.springframework.boot.SpringApplication; |
||||||
|
import org.springframework.boot.autoconfigure.SpringBootApplication; |
||||||
|
|
||||||
|
@SpringBootApplication |
||||||
|
public class SpringInitApplication { |
||||||
|
|
||||||
|
public static void main(String[] args) { |
||||||
|
SpringApplication.run(SpringInitApplication.class, args); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,68 @@ |
|||||||
|
package cc.bnblogs.springinit.config; |
||||||
|
|
||||||
|
//import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
//import org.springframework.context.annotation.Bean;
|
||||||
|
//import org.springframework.context.annotation.Configuration;
|
||||||
|
//import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
|
||||||
|
//import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
|
||||||
|
//import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
||||||
|
//import org.springframework.security.crypto.password.PasswordEncoder;
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//@Configuration
|
||||||
|
//public class SecurityConfig extends WebSecurityConfigurerAdapter {
|
||||||
|
//
|
||||||
|
// @Override
|
||||||
|
// protected void configure(AuthenticationManagerBuilder auth) throws Exception {
|
||||||
|
// BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
|
||||||
|
// auth.inMemoryAuthentication().
|
||||||
|
// withUser("lucy").
|
||||||
|
// password(passwordEncoder.encode("123")).roles("admin").
|
||||||
|
// and().
|
||||||
|
// withUser("tom")
|
||||||
|
// .password(passwordEncoder.encode("123")).roles("admin");
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// @Bean
|
||||||
|
// PasswordEncoder password() {
|
||||||
|
// return new BCryptPasswordEncoder();
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
|
import cc.bnblogs.springinit.service.CustomUserDetailsService; |
||||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||||
|
import org.springframework.context.annotation.Bean; |
||||||
|
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; |
||||||
|
import org.springframework.security.config.annotation.web.builders.HttpSecurity; |
||||||
|
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; |
||||||
|
import org.springframework.security.core.userdetails.UserDetailsService; |
||||||
|
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; |
||||||
|
import org.springframework.security.crypto.password.PasswordEncoder; |
||||||
|
import org.springframework.security.web.SecurityFilterChain; |
||||||
|
|
||||||
|
@EnableWebSecurity |
||||||
|
public class SecurityConfig { |
||||||
|
|
||||||
|
@Bean |
||||||
|
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { |
||||||
|
http |
||||||
|
.csrf().disable() |
||||||
|
.authorizeRequests() |
||||||
|
.antMatchers("/login", "/register").permitAll() |
||||||
|
.anyRequest().authenticated() // 默认所有请求需登录
|
||||||
|
.and() |
||||||
|
.formLogin() |
||||||
|
.defaultSuccessUrl("/hello", true) // 登录成功后跳转到 /hello
|
||||||
|
.permitAll() |
||||||
|
.and() |
||||||
|
.logout() |
||||||
|
.permitAll(); |
||||||
|
|
||||||
|
return http.build(); |
||||||
|
} |
||||||
|
|
||||||
|
@Bean |
||||||
|
public PasswordEncoder passwordEncoder() { |
||||||
|
return new BCryptPasswordEncoder(); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,26 @@ |
|||||||
|
package cc.bnblogs.springinit.controller; |
||||||
|
|
||||||
|
import cc.bnblogs.springinit.pojo.MyUser; |
||||||
|
import cc.bnblogs.springinit.service.UserService; |
||||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||||
|
import org.springframework.web.bind.annotation.PostMapping; |
||||||
|
import org.springframework.web.bind.annotation.RequestBody; |
||||||
|
import org.springframework.web.bind.annotation.RestController; |
||||||
|
|
||||||
|
@RestController |
||||||
|
public class UserController { |
||||||
|
@Autowired |
||||||
|
private UserService userService; |
||||||
|
|
||||||
|
@GetMapping("/hello") |
||||||
|
public String hello() { |
||||||
|
return "Hello World"; |
||||||
|
} |
||||||
|
|
||||||
|
@PostMapping("/register") |
||||||
|
public String register(@RequestBody MyUser user) { |
||||||
|
userService.register(user); |
||||||
|
return "User registered successfully!"; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,12 @@ |
|||||||
|
package cc.bnblogs.springinit.mapper; |
||||||
|
|
||||||
|
import cc.bnblogs.springinit.pojo.MyUser; |
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||||
|
import org.apache.ibatis.annotations.Mapper; |
||||||
|
import org.apache.ibatis.annotations.Select; |
||||||
|
|
||||||
|
@Mapper |
||||||
|
public interface UserMapper extends BaseMapper<MyUser> { |
||||||
|
@Select("SELECT * FROM users WHERE username = #{username}") |
||||||
|
MyUser selectByUsername(String username); |
||||||
|
} |
@ -0,0 +1,14 @@ |
|||||||
|
package cc.bnblogs.springinit.pojo; |
||||||
|
import com.baomidou.mybatisplus.annotation.TableId; |
||||||
|
import com.baomidou.mybatisplus.annotation.TableName; |
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
@Data |
||||||
|
@TableName("users") |
||||||
|
public class MyUser { |
||||||
|
@TableId |
||||||
|
private Long id; |
||||||
|
private String username; |
||||||
|
private String password; |
||||||
|
private Boolean enabled; |
||||||
|
} |
@ -0,0 +1,37 @@ |
|||||||
|
package cc.bnblogs.springinit.service; |
||||||
|
|
||||||
|
import cc.bnblogs.springinit.mapper.UserMapper; |
||||||
|
import cc.bnblogs.springinit.pojo.MyUser; |
||||||
|
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.Service; |
||||||
|
import org.springframework.security.core.userdetails.User; |
||||||
|
import java.util.Collections; |
||||||
|
|
||||||
|
@Service |
||||||
|
public class CustomUserDetailsService implements UserDetailsService { |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private UserMapper userMapper; |
||||||
|
|
||||||
|
@Override |
||||||
|
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { |
||||||
|
MyUser user = userMapper.selectByUsername(username); |
||||||
|
if (user == null) { |
||||||
|
throw new UsernameNotFoundException("User not found with username: " + username); |
||||||
|
} |
||||||
|
|
||||||
|
// 如果不需要处理权限,直接返回用户信息,默认赋予一个角色
|
||||||
|
return new User( |
||||||
|
user.getUsername(), |
||||||
|
user.getPassword(), |
||||||
|
user.getEnabled(), |
||||||
|
true, |
||||||
|
true, |
||||||
|
true, |
||||||
|
Collections.emptyList() |
||||||
|
); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,21 @@ |
|||||||
|
package cc.bnblogs.springinit.service; |
||||||
|
|
||||||
|
import cc.bnblogs.springinit.mapper.UserMapper; |
||||||
|
import cc.bnblogs.springinit.pojo.MyUser; |
||||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||||
|
import org.springframework.security.crypto.password.PasswordEncoder; |
||||||
|
import org.springframework.stereotype.Service; |
||||||
|
|
||||||
|
@Service |
||||||
|
public class UserService { |
||||||
|
@Autowired |
||||||
|
private PasswordEncoder passwordEncoder; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private UserMapper userMapper; |
||||||
|
|
||||||
|
public void register(MyUser user) { |
||||||
|
user.setPassword(passwordEncoder.encode(user.getPassword())); |
||||||
|
userMapper.insert(user); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,12 @@ |
|||||||
|
server: |
||||||
|
port: 8090 |
||||||
|
|
||||||
|
spring: |
||||||
|
datasource: |
||||||
|
username: root |
||||||
|
password: 123456 |
||||||
|
url: jdbc:mysql://192.168.175.130:3307/db?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8 |
||||||
|
driver-class-name: com.mysql.cj.jdbc.Driver |
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,13 @@ |
|||||||
|
package cc.bnblogs.springinit; |
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test; |
||||||
|
import org.springframework.boot.test.context.SpringBootTest; |
||||||
|
|
||||||
|
@SpringBootTest |
||||||
|
class SpringInitApplicationTests { |
||||||
|
|
||||||
|
@Test |
||||||
|
void contextLoads() { |
||||||
|
} |
||||||
|
|
||||||
|
} |
Loading…
Reference in new issue