首页>代码>基于Springboot Security开发的Github第三方登录Demo实例>/SpringbootSecurity/src/main/java/com/security/config/MyauthenticationProvider.java
package com.security.config;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.AuthenticationProvider;
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.authentication.DisabledException;
import org.springframework.security.authentication.LockedException;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Component;

import com.security.entity.UserEntity;
import com.security.repository.UserRepository;

/**
 * 
 * @Description: 自定义验证工具
 * @author [ Wenfeng.Huang@desay-svautomotive.com ] on [2018年9月5日上午9:55:08]
 * @Modified By: [修改人] on [修改日期] for [修改说明]
 *
 */
@Component
public class MyauthenticationProvider extends UserDetailsServiceImpl implements AuthenticationProvider{

	@Autowired
	UserRepository userRepository;
	/*@Autowired
	private UserRoleService userRoleService;
	@Autowired
	private RolePermissionDao rolePermissionDao;*/

	@Autowired
	private PasswordEncoder passwordEncoder;

	/**
	 * Description:登录认证
	 * 
	 * @param authentication
	 * @return
	 * @throws AuthenticationException
	 */
	@Override
	public Authentication authenticate(Authentication authentication) throws AuthenticationException {
		String status = "1";
		String userName = authentication.getName();
		String passWord = (String) authentication.getCredentials();
		UserEntity user = userRepository.findByUsername(userName);
		/**
		 *  UsernameNotFoundException 用户找不到
			BadCredentialsException 坏的凭据
			AccountStatusException 用户状态异常它包含如下子类
			AccountExpiredException 账户过期
			LockedException 账户锁定
			DisabledException 账户不可用
			CredentialsExpiredException 证书过期
		 */
		if (user == null) {
			System.out.println("用户不存在!");
			throw new UsernameNotFoundException("用户不存在!");
		}

		// 加密过程在这里体现,matches(CharSequence rawPassword, String encodedPassword)
		/*if (!passwordEncoder.matches(passWord, user.getPassword())) {
			throw new BadCredentialsException("密码错误!");
		}*/
		
		if (!user.getPassword().equals(passWord)) {
			System.out.println("密码错误!");
			throw new BadCredentialsException("密码错误!");
		}

		if (status.equals("2")) {
			throw new DisabledException("账号不可用,请联系系统管理员!");
		}

		if (status.equals("3")) {
			throw new LockedException("账号已锁定,请联系系统管理员!");
		}

		MyUserDetails myUserDetails = new MyUserDetails();
		myUserDetails.setUsername(userName);
		myUserDetails.setPassword(user.getPassword());
		//List<UserRoleEntity> userRoleEntitys = userRoleService.getUserRoleEntitiesByUserId(user.getUserId());
		//List<Role2PermissionEntity> role2PermissionEntities = new ArrayList<>();
		//for (UserRoleEntity userRoleEntity : userRoleEntitys) {
		//	role2PermissionEntities.addAll(rolePermissionDao.getRolePermissionByRoleId(userRoleEntity.getRoleId()));
		//}
		//myUserDetails.setPermissions(role2PermissionEntities);
		//Collection<? extends GrantedAuthority> authorities = myUserDetails.getAuthorities();
		List<GrantedAuthority> authorities = new ArrayList<>();
		authorities.addAll(user.getAuthorities());
		return new UsernamePasswordAuthenticationToken(user, passWord, authorities);
	}

	@Override
	public boolean supports(Class<?> arg0) {
		return true;
	}

}
最近下载更多
ゆ 、 Hurt°  LV2 2022年8月30日
呵呵哈哈哈  LV10 2022年7月8日
liuchenxi  LV1 2022年1月15日
lyws1986  LV17 2021年12月9日
fenghuijun  LV26 2021年8月23日
ericxu1116  LV24 2021年7月1日
shiopaaa  LV13 2021年4月15日
newhaijun  LV15 2021年3月29日
Coincidance  LV8 2020年12月3日
aa991215  LV17 2020年9月2日
最近浏览更多
15719908287  LV9 2024年11月1日
charleswang  LV7 2024年10月21日
abdkfksdkf  LV16 2024年9月20日
edpwyg  LV14 2024年7月22日
ma406805131  LV19 2024年6月28日
dapeng0011  LV15 2024年6月22日
计科一班  LV7 2024年6月18日
Hachi6  LV13 2024年5月23日
akittyboy  LV9 2024年4月23日
ysugxx  LV9 2023年12月9日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友