Commit 868e4ab3 authored by gzt's avatar gzt

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

parent 7b8121e1
...@@ -41,8 +41,19 @@ ...@@ -41,8 +41,19 @@
<artifactId>spring-cloud-starter-security</artifactId> <artifactId>spring-cloud-starter-security</artifactId>
<version>2.1.3.RELEASE</version> <version>2.1.3.RELEASE</version>
</dependency> </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> </dependencies>
......
...@@ -25,8 +25,10 @@ public class AuthorizationServerConfiguration extends AuthorizationServerConfig ...@@ -25,8 +25,10 @@ public class AuthorizationServerConfiguration extends AuthorizationServerConfig
@Autowired @Autowired
private AuthenticationManager authenticationManager; private AuthenticationManager authenticationManager;
@Autowired @Autowired
UserDetailsService userDetailsService; UserDetailsService myUserDetailsService;
// 使用最基本的InMemoryTokenStore生成token // 使用最基本的InMemoryTokenStore生成token
@Bean @Bean
...@@ -44,9 +46,10 @@ public class AuthorizationServerConfiguration extends AuthorizationServerConfig ...@@ -44,9 +46,10 @@ public class AuthorizationServerConfiguration extends AuthorizationServerConfig
public void configure(ClientDetailsServiceConfigurer clients) throws Exception { public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
clients.inMemory() clients.inMemory()
.withClient("client1")//用于标识用户ID .withClient("client1")//用于标识用户ID
.authorizedGrantTypes("authorization_code","client_credentials","refresh_token")//授权方式 .authorizedGrantTypes("authorization_code","client_credentials","password","refresh_token")//授权方式
.scopes("test")//授权范围 .scopes("test")//授权范围
.secret(PasswordEncoderFactories.createDelegatingPasswordEncoder().encode("123456"));//客户端安全码,secret密码配置从 Spring Security 5.0开始必须以 {bcrypt}+加密后的密码 这种格式填写; .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 ...@@ -70,7 +73,7 @@ public class AuthorizationServerConfiguration extends AuthorizationServerConfig
@Override @Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception { public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
// 配置tokenStore,需要配置userDetailsService,否则refresh_token会报错 // 配置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; 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.context.annotation.Bean;
import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
...@@ -20,6 +22,10 @@ import org.springframework.security.provisioning.InMemoryUserDetailsManager; ...@@ -20,6 +22,10 @@ import org.springframework.security.provisioning.InMemoryUserDetailsManager;
*/ */
@EnableWebSecurity //开启权限验证 @EnableWebSecurity //开启权限验证
public class SecurityConfig extends WebSecurityConfigurerAdapter { public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsService myUserDetailsService;
/** /**
* 配置这个bean会在做AuthorizationServerConfigurer配置的时候使用 * 配置这个bean会在做AuthorizationServerConfigurer配置的时候使用
* @return * @return
...@@ -31,21 +37,11 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { ...@@ -31,21 +37,11 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
return super.authenticationManagerBean(); 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 @Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception { protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService()); auth.userDetailsService(myUserDetailsService);
} }
} }
package com.yingxin.server.client.dao; 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 * description//TODO
* *
...@@ -7,5 +12,9 @@ package com.yingxin.server.client.dao; ...@@ -7,5 +12,9 @@ package com.yingxin.server.client.dao;
* @version 1.0 * @version 1.0
* @date 2019/8/22 * @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; ...@@ -8,5 +8,38 @@ package com.yingxin.server.client.entities;
* @date 2019/8/22 * @date 2019/8/22
*/ */
public class User { 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: server:
port: 8080 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