用户操作-登录代码实现

Spring Security使用数据库认证

在Spring Security中如果想要使用数据进行认证操作,有很多种操作方式,这里我们介绍使用UserDetails、UserDetailsService来完成操作。

UserDetails

public interface UserDetails extends Serializable {
	Collection<? extends GrantedAuthority> getAuthorities();
	String getPassword();
	String getUsername();
	boolean isAccountNonExpired();
	boolean isAccountNonLocked();
	boolean isCredentialsNonExpired();
	boolean isEnabled();
}

UserDetails是一个接口,我们可以认为UserDetails作用是于封装当前进行认证的用户信息,但由于其是一个接口,所以我们可以对其进行实现,也可以使用Spring Security提供的一个UserDetails的实现类User来完成

以下是User类的部分代码

public class User implements UserDetails, CredentialsContainer {
	private String password;
	private final String username;
	private final Set<GrantedAuthority> authorities;
	private final boolean accountNonExpired; //帐户是否过期
	private final boolean accountNonLocked; //帐户是否锁定
	private final boolean credentialsNonExpired; //认证是否过期
	private final boolean enabled; //帐户是否可用
}

UserDetailsService

public interface UserDetailsService {
	UserDetails loadUserByUsername(String username) throws UsernameNotFoundException;
}

上面将UserDetails与UserDetailsService做了一个简单的介绍,那么我们具体如何完成Spring Security的数据库认证操作哪,我们通过用户管理中用户登录来完成Spring Security的认证操作。

用户管理

用户登录

spring security的配置

<security:authentication-manager>
	<security:authentication-provider user-service-ref="userService">
	<!-- 配置加密的方式
	<security:password-encoder ref="passwordEncoder"/>
	-->
	</security:authentication-provider>
</security:authentication-manager>

登录页面login.jsp

Service

public interface IUserService extends UserDetailsService{

}
@Service("userService")
@Transactional
public class UserServiceImpl implements IUserService {

	@Autowired
	private IUserDao userDao;
	
	@Override
	public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
		UserInfo userInfo = userDao.findByUsername(username);
		List<Role> roles = userInfo.getRoles();
		List<SimpleGrantedAuthority> authoritys = getAuthority(roles);
		User user = new User(userInfo.getUsername(), "{noop}" + userInfo.getPassword(),
		userInfo.getStatus() == 0 ? false : true, true, true, true, authoritys);
		return user;
	}
	private List<SimpleGrantedAuthority> getAuthority(List<Role> roles) {
		List<SimpleGrantedAuthority> authoritys = new ArrayList();
		for (Role role : roles) {
		authoritys.add(new SimpleGrantedAuthority(role.getRoleName()));
		}
		return authoritys;
	}
}

IUserDao

public interface IUserDao {

	@Select("select * from user where id=#{id}")
	public UserInfo findById(Long id) throws Exception;
	
	@Select("select * from user where username=#{username}")
	@Results({
	@Result(id = true, property = "id", column = "id"),
	@Result(column = "username", property = "username"),
	@Result(column = "email", property = "email"),
	@Result(column = "password", property = "password"),
	@Result(column = "phoneNum", property = "phoneNum"),
	@Result(column = "status", property = "status"),
	@Result(column = "id", property = "roles", javaType = List.class, many =
	@Many(select = "com.learn.ssm.dao.IRoleDao.findRoleByUserId")) })
	public UserInfo findByUsername(String username);
	}
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值