From 7c4689c895a5a6b8961f7fef42d8fe631875fca4 Mon Sep 17 00:00:00 2001 From: lsy <18332763730@163.com> Date: Tue, 12 Dec 2017 22:00:27 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=AE=B0=E4=BD=8F=E6=88=91?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../boot-starter-security-browser/README.md | 1 + .../browser/config/BrowserSecurityConfig.java | 62 ++++++++++++++----- .../component/MsUserDetialsService.java | 17 +++-- .../core/config/param/BrowserProperties.java | 13 ++++ .../src/main/resources/static/signIn.html | 2 + 5 files changed, 70 insertions(+), 25 deletions(-) diff --git a/boot-starter/boot-starter-security/boot-starter-security-browser/README.md b/boot-starter/boot-starter-security/boot-starter-security-browser/README.md index a0e3e7b..7e6757f 100644 --- a/boot-starter/boot-starter-security/boot-starter-security-browser/README.md +++ b/boot-starter/boot-starter-security/boot-starter-security-browser/README.md @@ -3,6 +3,7 @@ ##相关配置参数说明 - `ms.security.browser.html` 自定义登录页面的地址 - `ms.security.browser.loginType` 身份认证后响应类型`REDIRECT`页面形式响应 +- `ms.security.browser.rememberMeSeconds` 记住我的时间,单位是秒。默认的时间是3600秒 `JSON` json形式的响应 - 定义自己的根据用户名获取密码的bean,定义自己的bean的名字为`userServiceImpl`即可 - `/authentication/require`处理身份认证跳转的接口地址 \ No newline at end of file diff --git a/boot-starter/boot-starter-security/boot-starter-security-browser/src/main/java/com/micro/fast/security/browser/config/BrowserSecurityConfig.java b/boot-starter/boot-starter-security/boot-starter-security-browser/src/main/java/com/micro/fast/security/browser/config/BrowserSecurityConfig.java index 6bca44e..97b1118 100644 --- a/boot-starter/boot-starter-security/boot-starter-security-browser/src/main/java/com/micro/fast/security/browser/config/BrowserSecurityConfig.java +++ b/boot-starter/boot-starter-security/boot-starter-security-browser/src/main/java/com/micro/fast/security/browser/config/BrowserSecurityConfig.java @@ -4,15 +4,21 @@ import com.micro.fast.security.core.config.param.SecurityProperties; import com.micro.fast.security.core.filter.ValidateCodeFilter; import com.micro.fast.security.core.pojo.ValidateCode; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +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.authentication.AuthenticationFailureHandler; import org.springframework.security.web.authentication.AuthenticationSuccessHandler; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; +import org.springframework.security.web.authentication.rememberme.JdbcTokenRepositoryImpl; +import org.springframework.security.web.authentication.rememberme.PersistentTokenRepository; + +import javax.sql.DataSource; /** * spring security browser端的配置类 @@ -42,7 +48,7 @@ public class BrowserSecurityConfig extends WebSecurityConfigurerAdapter { * 注入身份认证成功后续处理对象 */ @Autowired - private AuthenticationSuccessHandler msAuthenticationSuccessHandler; + private AuthenticationSuccessHandler msAuthenticationSuccessHandler; /** * 输入身份认证失败后后续处理对象 @@ -50,8 +56,19 @@ public class BrowserSecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private AuthenticationFailureHandler msAuthenticationFailureHandler; + /** + * 需要注入数据源 + */ + @Autowired + @Qualifier("masterDataSource") + private DataSource dataSource; + + @Autowired + private UserDetailsService userDetailsService; + /** * 自定义身份认证配置 + * * @param http * @throws Exception */ @@ -63,26 +80,41 @@ public class BrowserSecurityConfig extends WebSecurityConfigurerAdapter { validateCodeFilter.setSecurityProperties(securityProperties); validateCodeFilter.afterPropertiesSet(); http - .addFilterBefore(validateCodeFilter, UsernamePasswordAuthenticationFilter.class)//添加自定义的验证码处理器,在用户密码校验过滤器之前 - .formLogin()//使用表单登录 - .loginPage("/authentication/require")//自定义登录页面 - .loginProcessingUrl("/user/login")//配置spring security登录接口的访问地址,用于在自定义的登录页面提交请求 - .successHandler(msAuthenticationSuccessHandler)//定义身份认证成功后处理对象 - .failureHandler(msAuthenticationFailureHandler)//定义身份认证失败后处理对象 - .and() - .authorizeRequests()//下面是权限配置 - .antMatchers("/user/login","/code/image","/authentication/require",securityProperties.getBrowser().getHtml()).permitAll()//当访问这个页面的时候不进行身份认证,对用户自定义的登录页也不进行权限认证 - .anyRequest()//任何请求 - .authenticated()//都需要身份认证 - .and() - .csrf().disable();//暂时关闭掉跨站请求攻击防护 + .addFilterBefore(validateCodeFilter, UsernamePasswordAuthenticationFilter.class)//添加自定义的验证码处理器,在用户密码校验过滤器之前 + .formLogin()//使用表单登录 + .loginPage("/authentication/require")//自定义登录页面 + .loginProcessingUrl("/user/login")//配置spring security登录接口的访问地址,用于在自定义的登录页面提交请求 + .successHandler(msAuthenticationSuccessHandler)//定义身份认证成功后处理对象 + .failureHandler(msAuthenticationFailureHandler)//定义身份认证失败后处理对象 + .and() + .rememberMe() + .tokenRepository(persistentTokenRepository())//设置token的存储方式 + .tokenValiditySeconds(securityProperties.getBrowser().getRememberMeSeconds())//设置过期秒数 + .userDetailsService(userDetailsService)//设置获取用户信息后登录的方式 + .and() + .authorizeRequests()//下面是权限配置 + .antMatchers("/user/login", "/code/image", "/authentication/require", securityProperties.getBrowser().getHtml()).permitAll()//当访问这个页面的时候不进行身份认证,对用户自定义的登录页也不进行权限认证 + .anyRequest()//任何请求 + .authenticated()//都需要身份认证 + .and() + .csrf().disable();//暂时关闭掉跨站请求攻击防护 } + /** * 定义身份认证红密码的加密解密类的bean * @return */ @Bean - public PasswordEncoder passwordEncoder(){ + public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } + + @Bean + public PersistentTokenRepository persistentTokenRepository() { + JdbcTokenRepositoryImpl jdbcTokenRepository = new JdbcTokenRepositoryImpl(); + jdbcTokenRepository.setDataSource(dataSource); + //启动的时候创建表 + jdbcTokenRepository.setCreateTableOnStartup(true); + return jdbcTokenRepository; + } } diff --git a/boot-starter/boot-starter-security/boot-starter-security-browser/src/main/java/com/micro/fast/security/browser/config/component/MsUserDetialsService.java b/boot-starter/boot-starter-security/boot-starter-security-browser/src/main/java/com/micro/fast/security/browser/config/component/MsUserDetialsService.java index 939c59b..dfb959f 100644 --- a/boot-starter/boot-starter-security/boot-starter-security-browser/src/main/java/com/micro/fast/security/browser/config/component/MsUserDetialsService.java +++ b/boot-starter/boot-starter-security/boot-starter-security-browser/src/main/java/com/micro/fast/security/browser/config/component/MsUserDetialsService.java @@ -4,12 +4,11 @@ import com.micro.fast.security.browser.service.UserService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.security.core.authority.AuthorityUtils; +import org.springframework.beans.factory.annotation.Qualifier; 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.password.PasswordEncoder; import org.springframework.stereotype.Component; /** @@ -20,10 +19,9 @@ public class MsUserDetialsService implements UserDetailsService { private static final Logger log = LoggerFactory.getLogger(MsUserDetialsService.class); - @Autowired - private PasswordEncoder passwordEncoder; -// @Resource(name = "userServiceImpl") + @Autowired + @Qualifier("userServiceImpl") private UserService userService; /** @@ -35,11 +33,10 @@ public class MsUserDetialsService implements UserDetailsService { @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { log.info("根据username:{}获取密码",username); - //从数据库中根据用户名获取用户的详细身份认证信息 - /*User userByUsername = userService.getUserByUsername(username); - return userByUsername;*/ - //从数据库中去查找用户的密码 admin 是从数据库中查询出来的用户的密 - return new User(username,passwordEncoder.encode("admin"), AuthorityUtils.commaSeparatedStringToAuthorityList("admin")); + User userByUsername = userService.getUserByUsername(username); + return userByUsername; + /*从数据库中去查找用户的密码 admin 是从数据库中查询出来的用户的密 + return new User(username,passwordEncoder.encode("admin"), AuthorityUtils.commaSeparatedStringToAuthorityList("admin"));*/ } diff --git a/boot-starter/boot-starter-security/boot-starter-security-core/src/main/java/com/micro/fast/security/core/config/param/BrowserProperties.java b/boot-starter/boot-starter-security/boot-starter-security-core/src/main/java/com/micro/fast/security/core/config/param/BrowserProperties.java index 38d707f..b725c71 100644 --- a/boot-starter/boot-starter-security/boot-starter-security-core/src/main/java/com/micro/fast/security/core/config/param/BrowserProperties.java +++ b/boot-starter/boot-starter-security/boot-starter-security-core/src/main/java/com/micro/fast/security/core/config/param/BrowserProperties.java @@ -21,6 +21,19 @@ public class BrowserProperties { */ private LoginType loginType = LoginType.JSON; + /** + * 记住我的秒数,默认3600秒 + */ + private int rememberMeSeconds = 3600; + + public int getRememberMeSeconds() { + return rememberMeSeconds; + } + + public void setRememberMeSeconds(int rememberMeSeconds) { + this.rememberMeSeconds = rememberMeSeconds; + } + public String getHtml() { return html; } diff --git a/boot-starter/boot-starter-security/boot-starter-security-demo/src/main/resources/static/signIn.html b/boot-starter/boot-starter-security/boot-starter-security-demo/src/main/resources/static/signIn.html index 540a805..84bb7c5 100644 --- a/boot-starter/boot-starter-security/boot-starter-security-demo/src/main/resources/static/signIn.html +++ b/boot-starter/boot-starter-security/boot-starter-security-demo/src/main/resources/static/signIn.html @@ -10,6 +10,8 @@ + +