shiro之自定义realm

package com.my.shiro;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

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 org.apache.shiro.util.ByteSource;
import org.springframework.beans.factory.annotation.Autowired;

import com.my.pojo.User;
import com.my.service.UserService;

public class CustomeRealm extends AuthorizingRealm {

	@Autowired
	private UserService service;

	@Override
	public String getName() {

		return "customerRealm";
	}

	// 授权
	@Override
	protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection arg0) {
		User user = (User) arg0.getPrimaryPrincipal();

		// 查询当前用户的所有的角色和所有的权限,并且给他授权

		SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();

		List roles = service.getRoles(user);

		for (String string : roles) {

			System.out.println(string);
		}
		Set set = new HashSet(roles);
		info.setRoles(set);

		return info;
	}

	// 认证
	@Override
	protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken arg0) throws AuthenticationException {

		String username = (String) arg0.getPrincipal();
		// 数据库操作
		// 根据当前的用户名查询用户的个人信息,这里主要是密码

		User user = new User();
		user.setUserName(username);
		// 从数据库中查询出来的用户的真实信息
		User userDb = service.getUser(user);
		//将密码通过加盐和加密然后在和数据库中查找出的密码进行比较

		// 注入第一个参数是你保存在shiro中的session的对象也可以是一个字符串,第二参数是从数据库中查询出来的正确的密码,shiro会自动判断,如果此密码和刚才传递的密码不知会上抛异常
//第三个参数是你从数据库中查出改用户的加密时用的盐,
//第四额参数是你的自定义realm的名字,可以重写此方法,自己再命名
		SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(userDb,userDb.getUserPassword(),
				ByteSource.Util.bytes(userDb.getSalt()),getName());

		return info;
	}

}

想要他生效必须在spring_shiro.xml中将他声明成一个bean,而且还有将他写入到安全管理器中作为一个属性


		
	


	
		
		
	
	```

你可能感兴趣的:(shiro之自定义realm)