| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- package com.aijia.peixun.config;
- import com.aijia.peixun.entity.User;
- import com.aijia.peixun.service.JzPeiXunService;
- import com.aijia.peixun.utils.Constants;
- import com.alibaba.fastjson.JSONObject;
- import org.apache.shiro.SecurityUtils;
- import org.apache.shiro.authc.*;
- import org.apache.shiro.authz.AuthorizationInfo;
- import org.apache.shiro.authz.SimpleAuthorizationInfo;
- import org.apache.shiro.realm.AuthorizingRealm;
- import org.apache.shiro.session.Session;
- import org.apache.shiro.subject.PrincipalCollection;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.factory.annotation.Autowired;
- import java.util.Collection;
- import java.util.Objects;
- public class UserRealm extends AuthorizingRealm {
- private Logger logger = LoggerFactory.getLogger(UserRealm.class);
- @Autowired
- private JzPeiXunService jzPeiXunService;
- @Override
- @SuppressWarnings("unchecked")
- protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
- Session session = SecurityUtils.getSubject().getSession();
- //查询用户的权限
- JSONObject permission = (JSONObject) session.getAttribute(Constants.SESSION_USER_PERMISSION);
- logger.info("permission的值为:" + permission);
- logger.info("本用户权限为:" + permission.get("permissionList"));
- //为当前用户设置角色和权限
- SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();
- authorizationInfo.addStringPermissions((Collection<String>) permission.get("permissionList"));
- return authorizationInfo;
- }
- /**
- * 验证当前登录的Subject
- * LoginController.login()方法中执行Subject.login()时 执行此方法
- */
- @Override
- protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authcToken) throws AuthenticationException {
- //获取用户的账号名称 -- 手机号
- String loginName = (String) authcToken.getPrincipal();
- // 获取用户密码
- String password = new String((char[]) authcToken.getCredentials());
- User user = new User();
- //存储用户名
- user.setTelephoneno(loginName);
- //存储验证码
- user.setBackup2(password);
- //因为是手机号+短息验证码登录,即使没有此手机号账号,也可以登录,可以为null
- // if (user == null) {
- // //没找到帐号
- // throw new UnknownAccountException();
- // }
- //交给AuthenticatingRealm使用CredentialsMatcher进行密码匹配,如果觉得人家的不好可以自定义实现
- SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo(
- user,
- // user.getTelephoneno(),
- user.getBackup2(),
- //ByteSource.Util.bytes("salt"), salt=username+salt,采用明文访问时,不需要此句
- getName()
- );
- //session中不需要保存密码
- // user.remove("password");
- //将用户信息放入session中
- SecurityUtils.getSubject().getSession().setAttribute(Constants.SESSION_USER_INFO, user);
- System.out.println(authenticationInfo);
- return authenticationInfo;
- }
- public static String getUser(){
- Session session = SecurityUtils.getSubject().getSession();
- JSONObject userInfo = (JSONObject) session.getAttribute(Constants.SESSION_USER_INFO);
- if (Objects.isNull(userInfo)) {
- return null;
- }
- return userInfo.getString("username");
- }
- }
|