[Spring] Hessian权限认证

 
Hessian的一些基本简介已经在上一节已经全部介绍了,上一节还介绍了Hessian是把对象序列化为二进制流的形式在http信道中传输,那么对于安全性高的应用不应该采用hessian(比如网上支付等)、可以加一些权限验证,比如在服务器端加用户名,密码验证,然后在客户端提供用户名和密码,可如此一来用户名密码也会被捕获,毕竟用户名密码都在Http请求中,如果安全级别特别高的可以加Token,也就是加一层发送前的预备,如下图:

这样的话,既使请求被拦截,他们得到的也只不过是一个过期的Token,无法再一次发送到服务端,当然哪个程序都一样,安全级别一高就会添加很多的操作,就像开着防火墙网速会受一定的影响.下面我来介绍简单的权限认证,后续再结合实践优化程序.
修改服务端程序如下:
Java代码
  1. public class YclHessianServiceExporter extends HessianServiceExporter {    
  2.     public static final String AUTH = "ycl";   
  3.     @Override  
  4.     public void handleRequest(HttpServletRequest request, HttpServletResponse response)   
  5.             throws ServletException, IOException {   
  6.         String auth = request.getHeader("auth");   
  7.         if(auth == null || !auth.equalsIgnoreCase(AUTH)){    
  8.             //记录异常日志   
  9.             return ;   
  10.         }   
  11.         super.handleRequest(request, response);   
  12.     }   
  13.   
  14. }  
public class YclHessianServiceExporter extends HessianServiceExporter { 
	public static final String AUTH = "ycl";
	@Override
	public void handleRequest(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String auth = request.getHeader("auth");
		if(auth == null || !auth.equalsIgnoreCase(AUTH)){ 
			//记录异常日志
			return ;
		}
		super.handleRequest(request, response);
	}

}


服务器配置修改如下:
Java代码
  1. <bean name="/PersonManager"    
  2.         class="org.springframework.remoting.caucho.YclHessianServiceExporter">   
  3.            
  4.         <!--  需要导出的目标bean-->    
  5.         <property name="service" >   
  6.             <ref bean="personManager" />   
  7.         </property>    
  8.         <!--  Hessian服务的接口-->    
  9.         <property name="serviceInterface" value="com.module.PersonManager"/>     
  10.     </bean>  
<bean name="/PersonManager" 
		class="org.springframework.remoting.caucho.YclHessianServiceExporter">
		
		<!--  需要导出的目标bean--> 
        <property name="service" >
        	<ref bean="personManager" />
        </property> 
        <!--  Hessian服务的接口--> 
        <property name="serviceInterface" value="com.module.PersonManager"/>  
	</bean>


修改客户端程序如下(这是一个代理工厂,每一次客户端通过代码连接服务器时都会先通过URL来得到服务器端的连接)
Java代码
  1. public class YclHessianProxyFactory extends HessianProxyFactory{   
  2.   
  3.     @Override  
  4.     protected URLConnection openConnection(URL url) throws IOException {   
  5.         URLConnection conn = super.openConnection(url);   
  6.         conn.setRequestProperty("AUTH""ycl");   
  7.         return conn;    
  8.     }   
  9.   
  10. }  
public class YclHessianProxyFactory extends HessianProxyFactory{

	@Override
	protected URLConnection openConnection(URL url) throws IOException {
		URLConnection conn = super.openConnection(url);
        conn.setRequestProperty("AUTH", "ycl");
        return conn; 
	}

}

客户端配置如下:
Java代码
  1. <!-- PersonManager服务 -->   
  2.     <bean id="personManagerClient"  
  3.         class="org.springframework.remoting.caucho.HessianProxyFactoryBean">   
  4.         <property name="serviceUrl">   
  5.             <value>   
  6.                 http://localhost/Hessian/remoting/PersonManager   
  7.             </value>   
  8.         </property>   
  9.         <property name="serviceInterface">   
  10.             <value>com.module.PersonManager</value>   
  11.         </property>   
  12.           <property name="proxyFactory">   
  13.             <bean class="com.caucho.hessian.client.YclHessianProxyFactory"/>    
  14.        </property>    
  15.     </bean>  
<!-- PersonManager服务 -->
	<bean id="personManagerClient"
		class="org.springframework.remoting.caucho.HessianProxyFactoryBean">
		<property name="serviceUrl">
			<value>
				http://localhost/Hessian/remoting/PersonManager
			</value>
		</property>
		<property name="serviceInterface">
			<value>com.module.PersonManager</value>
		</property>
		  <property name="proxyFactory">
            <bean class="com.caucho.hessian.client.YclHessianProxyFactory"/> 
       </property> 
	</bean>

如此一来,在服务器启动的时候接收信息时,就会添加验证,如果Auth验证不通过,那么就不会再继续执行以下的程序.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值