package com.miv.shiro.common;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.LockedAccountException;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.authz.AuthorizationException;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import com.miv.core.constant.DatabaseConstants;
import com.miv.entity.Role;
import com.miv.entity.User;
import com.miv.shiro.login.service.LoginService;
import com.miv.shiro.role.service.RolesService;
/**
* shiro与工程接口类
*
* @author 赵治宇
* @version
*/
public class WebRealm extends AuthorizingRealm {
private LoginService loginService;
private RolesService rolesService;
public WebRealm() {
setName("WebRealm");
}
public void setLoginService(LoginService loginService) {
this.loginService = loginService;
}
public void setRolesService(RolesService rolesService) {
this.rolesService = rolesService;
}
/**
* 授权方法
*
* @return
*/
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) throws AuthorizationException {
String userName = (String) principals.fromRealm(getName()).iterator().next();
User user = new User();
user.setLoginName(userName);
try {
user = loginService.findUserByUsername(user);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
/*
* List<Roles> roleList = rolesService.getCurrentRoleList(user); if (user != null) {
*
* for (Roles role : roleList) { info.addRole(role.getRoleName()); } }
*/
Role role = rolesService.findRoleById(user);
if (role == null) {
throw new AuthorizationException();
}
info.addRole(role.getRoleCode());
return info;
}
/**
* 认证方法
*
* @return
*/
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authcToken) throws AuthenticationException {
MIVshiroToken token = (MIVshiroToken) authcToken;
User user = new User();
user.setLoginName(token.getUsername());
user.setPassword(String.valueOf(token.getPassword()));
Role role = new Role();
role.setId(token.getROLE_CODE() + 0L);
user.setRole(role);
try {
user = loginService.findUserByUsernameAndPassword(user);
} catch (Exception e) {
throw new AuthenticationException();
}
if (user != null) {
boolean flag = token.getROLE_CODE().equals(DatabaseConstants.ROLE_CODE_AGENCY)
|| token.getROLE_CODE().equals(DatabaseConstants.ROLE_CODE_CALL_CENTER)
|| token.getROLE_CODE().equals(DatabaseConstants.ROLE_CODE_ADMIN)
|| token.getROLE_CODE().equals(DatabaseConstants.ROLE_CODE_USER);
if (user.getStatus() == DatabaseConstants.STATUS_2.intValue() && flag) {
throw new LockedAccountException();
} else {
return new SimpleAuthenticationInfo(user.getLoginName(), user.getPassword(), getName());
}
} else {
throw new UnknownAccountException();
}
}
}