http.csrf().disable() | http.csrf().disable() | ||||
.authorizeHttpRequests((authorize) -> authorize | .authorizeHttpRequests((authorize) -> authorize | ||||
.antMatchers("/getHealth").permitAll() | .antMatchers("/getHealth").permitAll() | ||||
//.antMatchers("/user/create").permitAll() | |||||
.antMatchers("/user/create").permitAll() | |||||
.anyRequest().authenticated() | .anyRequest().authenticated() | ||||
) | ) | ||||
// Form login handles the redirect to the login page from the | // Form login handles the redirect to the login page from the |
package com.tuoheng.mapper; | |||||
import com.tuoheng.model.po.AuthoritiesPo; | |||||
import org.apache.ibatis.annotations.Mapper; | |||||
/** | |||||
* @author chenjiandong | |||||
* @description: TODO | |||||
* @date 2022/10/9 10:39 | |||||
*/ | |||||
@Mapper | |||||
public interface AuthoritiesMapper { | |||||
int insertAuthorities(AuthoritiesPo authoritiesPo); | |||||
} |
import lombok.Data; | import lombok.Data; | ||||
import javax.validation.constraints.NotEmpty; | import javax.validation.constraints.NotEmpty; | ||||
import javax.validation.constraints.NotNull; | |||||
import java.util.List; | import java.util.List; | ||||
/** | /** | ||||
@NotEmpty(message = "password can not be empty!") | @NotEmpty(message = "password can not be empty!") | ||||
private String password; | private String password; | ||||
@NotNull(message = "roles can not be empty!") | |||||
private List<String> roles; | private List<String> roles; | ||||
} | } |
package com.tuoheng.model.po; | |||||
import lombok.Data; | |||||
import lombok.experimental.Accessors; | |||||
/** | |||||
* @author chenjiandong | |||||
* @description: TODO | |||||
* @date 2022/10/9 10:20 | |||||
*/ | |||||
@Data | |||||
@Accessors(chain = true) | |||||
public class AuthoritiesPo { | |||||
private Integer id; | |||||
private Integer userId; | |||||
private String username; | |||||
private String authority; | |||||
} |
private Integer enabled; | private Integer enabled; | ||||
private String clientId; | |||||
} | } |
package com.tuoheng.service.impl; | package com.tuoheng.service.impl; | ||||
import com.sun.deploy.util.StringUtils; | |||||
import com.tuoheng.mapper.AuthoritiesMapper; | |||||
import com.tuoheng.mapper.UserMapper; | import com.tuoheng.mapper.UserMapper; | ||||
import com.tuoheng.model.param.CreateUserDto; | import com.tuoheng.model.param.CreateUserDto; | ||||
import com.tuoheng.model.po.AuthoritiesPo; | |||||
import com.tuoheng.model.po.UserPo; | import com.tuoheng.model.po.UserPo; | ||||
import com.tuoheng.service.UserSevice; | import com.tuoheng.service.UserSevice; | ||||
import com.tuoheng.until.JsonResult; | import com.tuoheng.until.JsonResult; | ||||
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; | import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; | ||||
import org.springframework.security.provisioning.UserDetailsManager; | import org.springframework.security.provisioning.UserDetailsManager; | ||||
import org.springframework.stereotype.Service; | import org.springframework.stereotype.Service; | ||||
import org.springframework.transaction.annotation.Transactional; | |||||
/** | /** | ||||
* @author chenjiandong | * @author chenjiandong | ||||
@Autowired | @Autowired | ||||
private UserMapper userMapper; | private UserMapper userMapper; | ||||
@Autowired | |||||
private AuthoritiesMapper authoritiesMapper; | |||||
@Transactional(rollbackFor = Exception.class) | |||||
public JsonResult createUser(CreateUserDto createUserDto){ | public JsonResult createUser(CreateUserDto createUserDto){ | ||||
// UserDetails userDetails = User.builder().passwordEncoder(s -> "{bcrypt}" + new BCryptPasswordEncoder().encode(s)) | |||||
// .username("admin") | |||||
// .password("123456") | |||||
// .roles("ADMIN") | |||||
// .build(); | |||||
// userDetailsManager.createUser(userDetails); | |||||
UserPo userPo = new UserPo() | UserPo userPo = new UserPo() | ||||
.setUsername(createUserDto.getUsername()) | .setUsername(createUserDto.getUsername()) | ||||
.setPassword("{bcrypt}" + new BCryptPasswordEncoder().encode(createUserDto.getPassword())); | .setPassword("{bcrypt}" + new BCryptPasswordEncoder().encode(createUserDto.getPassword())); | ||||
userMapper.insertUser(userPo); | userMapper.insertUser(userPo); | ||||
return JsonResult.success(); | |||||
String roles = StringUtils.join(createUserDto.getRoles(),","); | |||||
AuthoritiesPo authoritiesPo = new AuthoritiesPo() | |||||
.setUserId(userPo.getId()) | |||||
.setUsername(createUserDto.getUsername()) | |||||
.setAuthority(roles); | |||||
authoritiesMapper.insertAuthorities(authoritiesPo); | |||||
return JsonResult.success(userPo.getId()); | |||||
} | } | ||||
} | } |
.redirectUri("http://www.baidu.com") | .redirectUri("http://www.baidu.com") | ||||
.scope(OidcScopes.OPENID) | .scope(OidcScopes.OPENID) | ||||
.scope(OidcScopes.PROFILE) | .scope(OidcScopes.PROFILE) | ||||
.scope(OidcScopes.EMAIL) | |||||
.clientSettings(ClientSettings.builder() | .clientSettings(ClientSettings.builder() | ||||
.requireAuthorizationConsent(true) | .requireAuthorizationConsent(true) | ||||
.requireProofKey(false) | .requireProofKey(false) |
<?xml version="1.0" encoding="UTF-8"?> | |||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |||||
<mapper namespace="com.tuoheng.mapper.AuthoritiesMapper"> | |||||
<insert id="insertAuthorities" parameterType="com.tuoheng.model.po.AuthoritiesPo"> | |||||
insert into authorities (user_id, username, authority) | |||||
values (#{userId}, #{username}, #{authority}) | |||||
</insert> | |||||
</mapper> |
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | ||||
<mapper namespace="com.tuoheng.mapper.UserMapper"> | <mapper namespace="com.tuoheng.mapper.UserMapper"> | ||||
<insert id="insertUser" parameterType="com.tuoheng.model.po.UserPo"> | |||||
<insert id="insertUser" parameterType="com.tuoheng.model.po.UserPo" keyProperty="id" useGeneratedKeys="true"> | |||||
insert into users (username, password) | insert into users (username, password) | ||||
values (#{username}, #{password}) | values (#{username}, #{password}) | ||||
</insert> | </insert> |
package com.tuoheng; | |||||
import org.junit.jupiter.api.Test; | |||||
import org.springframework.boot.test.context.SpringBootTest; | |||||
@SpringBootTest | |||||
class SpringAuthorizationServerApplicationTests { | |||||
@Test | |||||
void contextLoads() { | |||||
} | |||||
} |
package com.tuoheng.config; | |||||
import org.junit.jupiter.api.Test; | |||||
import org.springframework.beans.factory.annotation.Autowired; | |||||
import org.springframework.boot.test.context.SpringBootTest; | |||||
import org.springframework.security.core.userdetails.User; | |||||
import org.springframework.security.core.userdetails.UserDetails; | |||||
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; | |||||
import org.springframework.security.provisioning.UserDetailsManager; | |||||
/** | |||||
* @author chenjiandong | |||||
* @description: TODO | |||||
* @date 2022/10/8 11:05 | |||||
*/ | |||||
@SpringBootTest | |||||
class ApplicationTests { | |||||
/** | |||||
* 初始化客户端信息 | |||||
*/ | |||||
@Autowired | |||||
private UserDetailsManager userDetailsManager; | |||||
/** | |||||
* 创建用户信息 | |||||
*/ | |||||
@Test | |||||
void testSaveUser() { | |||||
UserDetails userDetails = User.builder().passwordEncoder(s -> "{bcrypt}" + new BCryptPasswordEncoder().encode(s)) | |||||
.username("admin") | |||||
.password("123456") | |||||
.roles("ADMIN") | |||||
.build(); | |||||
userDetailsManager.createUser(userDetails); | |||||
} | |||||
} |