文章目录

1. 原登录方法2. 免密登录(对接小程序)3. 免密登录(对接统一认证平台)

用的是若依的前后端分离的版本,项目接口是给小程序用 openid 直接免登录

1. 原登录方法

// 用户验证

Authentication authentication = null;

try

{

UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(username, password);

AuthenticationContextHolder.setContext(authenticationToken);

// 该方法会去调用UserDetailsServiceImpl.loadUserByUsername

authentication = authenticationManager.authenticate(authenticationToken);

}

catch (Exception e)

{

if (e instanceof BadCredentialsException)

{

AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match")));

throw new UserPasswordNotMatchException();

}

else

{

AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage()));

throw new ServiceException(e.getMessage());

}

}

finally

{

AuthenticationContextHolder.clearContext();

}

AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));

LoginUser loginUser = (LoginUser) authentication.getPrincipal();

recordLoginInfo(loginUser.getUserId());

// 生成token

return tokenService.createToken(loginUser);

他这是根据用户名和密码进行比对、由于密码没办法转换成明文

2. 免密登录(对接小程序)

//根据openId查询用户

SysUser sysUser = userService.selectUserByOpenId(openId);

if (sysUser!=null){

username=sysUser.getUserName();

password=sysUser.getPassword();

}else{

AsyncManager.me().execute(AsyncFactory.recordLogininfor(openId, Constants.LOGIN_FAIL, "openId错误"));

throw new UserPasswordNotMatchException();

}

Authentication authentication = null;

try

{

//直接不用springsecurity 认证、自己构造出数据

UserDetails userDetails=new LoginUser(sysUser.getUserId(), sysUser.getDeptId(), sysUser, permissionService.getMenuPermission(sysUser));

authentication = new UsernamePasswordAuthenticationToken(userDetails, null,

AuthorityUtils.createAuthorityList("ROLE_USER"));

SecurityContextHolder.getContext().setAuthentication(authentication);

}

catch (Exception e)

{

if (e instanceof BadCredentialsException)

{

AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match")));

throw new UserPasswordNotMatchException();

}

else

{

AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage()));

throw new ServiceException(e.getMessage());

}

}

finally

{

AuthenticationContextHolder.clearContext();

}

AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));

LoginUser loginUser = (LoginUser) authentication.getPrincipal();

recordLoginInfo(loginUser.getUserId());

// 生成token

return tokenService.createToken(loginUser);

3. 免密登录(对接统一认证平台)

对接统一认证平台

/**

* 集成单点免密登录

*

* @param username

* @return

*/

public String jwtLogin(String username) {

SysUser sysUser = userService.selectUserByUserName(username);

if (StringUtils.isNull(sysUser)) {

log.info("登录用户:{} 不存在.", username);

throw new UsernameNotFoundException("登录用户:" + username + " 不存在");

} else if (UserStatus.DELETED.getCode().equals(sysUser.getDelFlag())) {

log.info("登录用户:{} 已被删除.", username);

throw new BaseException("对不起,您的账号:" + username + " 已被删除");

} else if (UserStatus.DISABLE.getCode().equals(sysUser.getStatus())) {

log.info("登录用户:{} 已被停用.", username);

throw new BaseException("对不起,您的账号:" + username + " 已停用");

}

Authentication authentication = null;

try {

//直接不用springsecurity 认证、自己构造出数据 TODO 这里对于除了admin以外的用户角色列表是否需要遍历逗号分割拼接暂未测试

UserDetails userDetails = new LoginUser(sysUser.getUserId(), sysUser.getDeptId(), sysUser, permissionService.getMenuPermission(sysUser));

authentication = new UsernamePasswordAuthenticationToken(userDetails, null,

AuthorityUtils.createAuthorityList("ROLE_USER"));

SecurityContextHolder.getContext().setAuthentication(authentication);

} catch (Exception e) {

if (e instanceof BadCredentialsException) {

AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match")));

throw new UserPasswordNotMatchException();

} else {

AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage()));

throw new CustomException(e.getMessage());

}

}

AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));

LoginUser loginUser = (LoginUser) authentication.getPrincipal();

// 生成token

return tokenService.createToken(loginUser);

}

推荐阅读

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。