Problema ao criar Proxy de Segurança

Olá

Galera estou tentando criar um proxy de segurança

Só que ta dando um classCastException

Segue minhas classes



public class Funcionario extends Pessoa{

	private int id;
	private double salario;
	
	public Funcionario(String nome, int idade, int id, double salario){
		
		super(nome,idade);
		
		this.id = id;
		this.salario = salario;
	}
	
	public Funcionario(){}
	
	public int getId() {
		return id;
	}
	
	public void setId(int id) {
		this.id = id;
	}
	
	public double getSalario() {
		return salario;
	}
	
	public void setSalario(double salario) {
		this.salario = salario;
	}
	
	
}


import java.lang.reflect.InvocationHandler;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class AdminInvocationHandler implements InvocationHandler{

	Funcionario funcionario;
	
	public AdminInvocationHandler(Funcionario funcionario){
		this.funcionario = funcionario;
	}
	
	@Override
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		
		try{
			if(method.getName().startsWith("get")){
				System.out.println("Chegou aki");
				return method.invoke(funcionario, args);
			
			}else if(method.getName().startsWith("set")){
				System.out.println("Ou chegou aki");
				return method.invoke(funcionario, args);
			}
		}catch(InvocationTargetException e){
			e.printStackTrace();
		}
		
		return null;
	}

	
}


import java.lang.reflect.Proxy;

public class TestProxy {

	public static void main(String args[]){
		
		new TestProxy().run();
		
	}
	
	public void run(){
		
		Funcionario bruno = new Funcionario();
		Funcionario adminProxy = getAdminProxy(bruno);
		
		adminProxy.setId(1);
		adminProxy.setNome("Bruno");
		adminProxy.setIdade(21);
		adminProxy.setSalario(560);
		
		System.out.println("----- Dados Funcionário -----");
		
		System.out.println("\nId: "+ adminProxy.getId());
		System.out.println("Nome: "+ adminProxy.getNome());
		System.out.println("Idade: "+ adminProxy.getIdade());
		System.out.println("Salário: "+ adminProxy.getSalario());
		
	}
	
	public Funcionario getAdminProxy(Funcionario funcionario){
		
		return (Funcionario) Proxy.newProxyInstance(funcionario.getClass().getClassLoader(),
													funcionario.getClass().getInterfaces(),
													new AdminInvocationHandler(funcionario));
	}
	
	public Funcionario getUserProxy(Funcionario funcionario){
		
		return (Funcionario) Proxy.newProxyInstance(funcionario.getClass().getClassLoader(),
													funcionario.getClass().getInterfaces(),
													new UserInvocationHandler(funcionario));
	}
}

Ta dando um classCastException quando eu tento converter o Proxy para o Funcionário

Alguém sabe o porque?

No livro que eu to seguindo o kra faz assim

Valew