SpringSecurity 投票器

访问控制

在现在的一些软件设计操作上,考虑安全性以及操作性的平衡点,所以一般在本地服务器上(你现在使的电脑就是你发布的服务器),

本地服务器可以不受用户登录的限制。

在springSecurity之中提供有一个投票器的概念,投票器有以下几种:

     支持:如果在本地,就不受限制

     反对:不是在本地,就反对

     弃权:一切照旧

 

范例:实现投票器

package jcn;

import java.util.Collection;
import java.util.Iterator;

import org.springframework.security.access.AccessDecisionVoter;
import org.springframework.security.access.ConfigAttribute;
import org.springframework.security.core.Authentication;
import org.springframework.security.web.authentication.WebAuthenticationDetails;

public  class IPAddressVote implements AccessDecisionVoter {

	//判断是否支持投票操作
	@Override
	public boolean supports(ConfigAttribute attribute) {
		//有一个属性是"IP_LOCAL_HOST"
		return attribute.getAttribute() != null && attribute.getAttribute().startsWith("IP_");
	}
	//根据类型判断
	@Override
	public boolean supports(Class arg0) {
		return false;
	}
	//投票过程
	@Override
	public int vote(Authentication aut, Object object,
			Collection attributes ){
		//现在根据ip地址判断,并且项目不是通过WEB认证进行的
		if (!(aut.getDetails() instanceof WebAuthenticationDetails)) {
			return AccessDecisionVoter.ACCESS_DENIED; //拒绝你操作
		}
		//如果现在是来自WEB的认证授权操作
		WebAuthenticationDetails datails = (WebAuthenticationDetails) aut.getDetails();
		String ip = datails.getRemoteAddress();//取得IP地址
		Iterator iter = attributes.iterator();
		while (iter.hasNext()) {
			ConfigAttribute caAttribute = iter.next();
			//如果是本地ip地址
			if ("IP_LOCAL_HOST".equals(caAttribute.getAttribute())) {
				if ("0:0:0:0:0:0:0:1".equals(ip)) {//是本机的ip
					return AccessDecisionVoter.ACCESS_DENIED;
				}
			}
		}
		return AccessDecisionVoter.ACCESS_ABSTAIN;
	}

}
 
  

在安全框架中配置投票器:



	
		
			
			
			
		
	

此时就可以利用投票器的方式来处理操作。

修改Action程序类,增加本地认证服务:

由于操作者是处于服务器本地ip服务上,所以此时可以直接进行数据的操作。

你可能感兴趣的:(#,spring全家桶,大学与Java那些年)