Commit 868e4ab3 authored by gzt's avatar gzt

添加数据库操作,从数据库取数据判断

parent 7b8121e1
......@@ -41,8 +41,19 @@
<artifactId>spring-cloud-starter-security</artifactId>
<version>2.1.3.RELEASE</version>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
<!-- mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
<version>5.1.47</version>
</dependency>
</dependencies>
......
......@@ -25,8 +25,10 @@ public class AuthorizationServerConfiguration extends AuthorizationServerConfig
@Autowired
private AuthenticationManager authenticationManager;
@Autowired
UserDetailsService userDetailsService;
UserDetailsService myUserDetailsService;
// 使用最基本的InMemoryTokenStore生成token
@Bean
......@@ -44,9 +46,10 @@ public class AuthorizationServerConfiguration extends AuthorizationServerConfig
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
clients.inMemory()
.withClient("client1")//用于标识用户ID
.authorizedGrantTypes("authorization_code","client_credentials","refresh_token")//授权方式
.authorizedGrantTypes("authorization_code","client_credentials","password","refresh_token")//授权方式
.scopes("test")//授权范围
.secret(PasswordEncoderFactories.createDelegatingPasswordEncoder().encode("123456"));//客户端安全码,secret密码配置从 Spring Security 5.0开始必须以 {bcrypt}+加密后的密码 这种格式填写;
// .secret(PasswordEncoderFactories.createDelegatingPasswordEncoder().encode("123456"));passwordEncoder.encode("123456")
}
/**
......@@ -70,7 +73,7 @@ public class AuthorizationServerConfiguration extends AuthorizationServerConfig
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
// 配置tokenStore,需要配置userDetailsService,否则refresh_token会报错
endpoints.authenticationManager(authenticationManager).tokenStore(memoryTokenStore()).userDetailsService(userDetailsService);
endpoints.authenticationManager(authenticationManager).tokenStore(memoryTokenStore()).userDetailsService(myUserDetailsService);
}
......
package com.yingxin.server.client.config;
import com.yingxin.server.client.dao.UserDao;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.crypto.factory.PasswordEncoderFactories;
import org.springframework.stereotype.Component;
/**
* description//TODO
* 自定义登陆
* 配置用户
* 使用内存中的用户,实际项目中,一般使用的是数据库保存用户,具体的实现类可以使用JdbcDaoImpl或者JdbcUserDetailsManager
* @author gaozhentao
* @version 1.0
* @date 2019/8/13/**
*
*/
@Component("myUserDetailsService")
public class MyUserDetailsService implements UserDetailsService {
private org.slf4j.Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private UserDao userDao;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
logger.info("登陆用户名:",username);
// return
return new User(username, PasswordEncoderFactories.createDelegatingPasswordEncoder().encode((userDao.findByUsername(username)).getPassword()), AuthorityUtils.commaSeparatedStringToAuthorityList("admin"));
}
}
package com.yingxin.server.client.config;
import com.yingxin.server.client.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
......@@ -20,6 +22,10 @@ import org.springframework.security.provisioning.InMemoryUserDetailsManager;
*/
@EnableWebSecurity //开启权限验证
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsService myUserDetailsService;
/**
* 配置这个bean会在做AuthorizationServerConfigurer配置的时候使用
* @return
......@@ -31,21 +37,11 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
return super.authenticationManagerBean();
}
/**
* 配置用户
* 使用内存中的用户,实际项目中,一般使用的是数据库保存用户,具体的实现类可以使用JdbcDaoImpl或者JdbcUserDetailsManager
* @return
*/
@Bean
@Override
protected UserDetailsService userDetailsService() {
InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
manager.createUser(User.withUsername("admin").password(PasswordEncoderFactories.createDelegatingPasswordEncoder().encode("admin")).authorities("USER").build());
return manager;
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService());
auth.userDetailsService(myUserDetailsService);
}
}
package com.yingxin.server.client.dao;
import com.yingxin.server.client.entities.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
/**
* description//TODO
*
......@@ -7,5 +12,9 @@ package com.yingxin.server.client.dao;
* @version 1.0
* @date 2019/8/22
*/
public class UserDao {
@Mapper
public interface UserDao {
@Select("select * from user where username = #{username}")
User findByUsername(@Param("username") String username);
}
......@@ -8,5 +8,38 @@ package com.yingxin.server.client.entities;
* @date 2019/8/22
*/
public class User {
private Integer uid;
private String username;
private String password;
public Integer getUid() {
return uid;
}
public void setUid(Integer uid) {
this.uid = uid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username == null ? null : username.trim();
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password == null ? null : password.trim();
}
@Override
public String toString() {
return "User{" + "uid=" + uid + ", username='" + username + '\'' + ", password='" + password + '\'' + '}';
}
}
server:
port: 8080
spring:
datasource:
# 数据源基本配置
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/demo?useUnicode=true&characterEncoding=utf-8&useSSL=false
# 数据源其他配置
initialSize: 5
minIdle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
# 配置监控统计拦截的filters ,去掉后监控界面sql无法统计,'wall'用于防火墙
filters: stat,wall,log4j
mybatis:
type-aliases-package: com.mybatis.demo.entities
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment