/**
* @Intro descrption here
* @author Lee
* @Date 2013-7-30
*/
package com.fang.bbks.common.security;
import java.util.List;
import org.apache.shiro.authc.AccountException;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.authc.UsernamePasswordToken;
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 org.springframework.beans.factory.annotation.Autowired;
import com.fang.bbks.common.utils.Collections3;
import com.fang.bbks.modules.sys.entity.User;
import com.fang.bbks.modules.sys.service.UserService;
/**
* @author Lee
*/
public class SystemRealm extends AuthorizingRealm {
// @Autowired
// UserService userService;
/**
* 当用户进行访问链接时的授权方法
*/
@Override
protected AuthorizationInfo doGetAuthorizationInfo(
PrincipalCollection principals) {
/*
* if (principals == null) {
throw new AuthorizationException("Principal对象不能为空");
}
User user = (User) principals.fromRealm(getName()).iterator().next();
* */
Principal principal = (Principal) getAvailablePrincipal(principals);
User user = null;//userService.getByUserName(principal.getName());
// 获取用户响应的permission
List<String> permissions = Collections3.extractToList(user.getRoleList(), "permission");
SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
info.addStringPermissions(permissions);
return info;
}
/**
* 认证回调函数, 登录时调用
*/
@Override
protected AuthenticationInfo doGetAuthenticationInfo(
AuthenticationToken token) throws AuthenticationException {
System.out.println("------!");
UsernamePasswordToken usernamePasswordToken = (UsernamePasswordToken) token;
String username = usernamePasswordToken.getUsername();
if (username == null) {
throw new AccountException("用户名不能为空");
}
User user = null;//userService.getByUserName(username);
if (user == null) {
throw new UnknownAccountException("用户不存在");
}
return new SimpleAuthenticationInfo(user,user.getPassword(),getName());
}
}