springsecurity实现UserDetailsService改变用户信息来源

springsecurity实现UserDetailsService改变用户信息来源springsecurity用户验证,默认我们为了简单,直接使用在配置文件中写死用户名和密码的方式:在真实的系统中,我们希望用户的信息来自数据库,而不是写死的,我们就需要实现UserDetailsService接口,实现相应的方法,然后配置authentication-provider,指定我们自定义的UserDetailService。这里定义一个类SecurityUserDetai…

大家好,欢迎来到IT知识分享网。

springsecurity用户验证,默认我们为了简单,直接使用在配置文件中写死用户名和密码的方式:

springsecurity实现UserDetailsService改变用户信息来源

在真实的系统中,我们希望用户的信息来自数据库,而不是写死的,我们就需要实现UserDetailsService接口,实现相应的方法,然后配置authentication-provider,指定我们自定义的UserDetailService。

这里定义一个类SecurityUserDetailsService,实现UserDetailsService接口:

package com.xxx.ssh.web.service.impl;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import com.xxx.ssh.web.domain.User;
import com.xxx.ssh.web.service.UserService;
public class SecurityUserDetailsService implements UserDetailsService {
	@Autowired
	private UserService userService;
	@Override
	public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
		User user = userService.findByUsername(username);
		if(user==null) {
			throw new UsernameNotFoundException("用户名或密码错误");
		}
		return new org.springframework.security.core.userdetails.User(username, 
				user.getPassword(), 
				user.isStatus(), 
				true, 
				true, 
				true, 
				getGrantedAuthority(user));
	}
	public List<GrantedAuthority> getGrantedAuthority(User user){
		List<GrantedAuthority> list = new ArrayList<>();
		list.add(new SimpleGrantedAuthority("ROLE_ADMIN"));
		return list;
	}
}

另外,就需要配置一下authentication-provider即可,在配置之前,我们需要将SecurityUserDetailsService这个实体bean配置好。修改后的spring-security配置。

<bean id="securityUserDetailsService" class="com.xxx.ssh.web.service.impl.SecurityUserDetailsService">
</bean>
<sec:authentication-manager id="authentication-manager">
	<sec:authentication-provider user-service-ref="securityUserDetailsService">
	   <sec:password-encoder hash="md5"/>
	</sec:authentication-provider>
</sec:authentication-manager>

数据库中的密码使用了md5加密,所以这里配置authentication-provider属性的时候,我们需要配置password-encoder,指定hash=”md5″,这样在登录验证的时候,我们前端传过来的密码会经过md5加密,然后和数据库中的密码做比对,如果用户名密码都正确,登录成功,否则,登录失败。 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/15789.html

(0)
上一篇 2024-02-08 10:15
下一篇 2024-02-15 08:26

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信