06自定义Realm实现授权
1.复制03_Authentication_realm项目
2.创建ActiverUser
package com.domain;
import java.util.List;
public class ActiverUser {
private User user;
private List<String> roles;
private List<String> permissions;
public ActiverUser() {
}
public ActiverUser(User user, List<String> roles, List<String> permissions) {
this.user = user;
this.roles = roles;
this.permissions = permissions;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public List<String> getRoles() {
return roles;
}
public void setRoles(List<String> roles) {
this.roles = roles;
}
public List<String> getPermissions() {
return permissions;
}
public void setPermissions(List<String> permissions) {
this.permissions = permissions;
}
}
3.创建RoleService
package com.service;
import java.util.List;
public interface RoleService {
List<String> queryRoleByUserName(String username);
}
4.创建RoleServiceImpl
package com.service.impl;
import com.service.RoleService;
import java.util.Arrays;
import java.util.List;
public class RoleServiceImpl implements RoleService {
@Override
public List<String> queryRoleByUserName(String username) {
return Arrays.asList("role1","role2","role3");
}
}
5.创建PermissionService
package com.service;
import java.util.List;
public interface PermissionService {
List<String> queryPermissionByUsername(String username);
}
6.创建PermissionServiceImpl
package com.service.impl;
import com.service.PermissionService;
import java.util.Arrays;
import java.util.List;
public class PermissionServiceImpl implements PermissionService {
@Override
public List<String> queryPermissionByUsername(String username) {
return Arrays.asList("user:query","user:add","user:update","user:delete");
}
}
7.修改UserRealm
package com.realm;
import com.domain.ActiverUser;
import com.domain.User;
import com.service.PermissionService;
import com.service.RoleService;
import com.service.UserService;
import com.service.impl.PermissionServiceImpl;
import com.service.impl.RoleServiceImpl;
import com.service.impl.UserServiceImpl;
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.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import java.util.Collection;
import java.util.List;
public class UserRealm extends AuthorizingRealm {
private UserService userService = new UserServiceImpl();
private RoleService roleService = new RoleServiceImpl();
private PermissionService permissionService = new PermissionServiceImpl();
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
String username = token.getPrincipal().toString();
token.getCredentials();
System.out.println(username);
User user = userService.queryUserByUserName(username);
if (null != user) {
List<String> roles = roleService.queryRoleByUserName(user.getUsername());
List<String> permissions = permissionService.queryPermissionByUsername(user.getUsername());
ActiverUser activerUser = new ActiverUser(user, roles, permissions);
SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(activerUser, user.getPwd(), this.getName());
return info;
} else {
return null;
}
}
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principal) {
System.out.println("doGetAuthorizationInfo");
ActiverUser activerUser = (ActiverUser) principal.getPrimaryPrincipal();
SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
Collection<String> roles = activerUser.getRoles();
if (null != roles && roles.size() > 0) {
info.addRoles(roles);
}
Collection<String> permissions = activerUser.getPermissions();
if (null != permissions && permissions.size() > 0) {
info.addStringPermissions(permissions);
}
return info;
}
}
8.测试
boolean role1 = subject.hasRole("role1");
System.out.println("是否有role1角色:" + role1);
boolean permission1 = subject.isPermitted("user:query");
System.out.println("是否有permission1权限:" + permission1);