Hessian之简单使用

以下是简单的hessian服务代码:

 

1.导包

<dependency>
<groupId>com.caucho</groupId>
<artifactId>hessian</artifactId>
<version>4.0.38</version>
</dependency>

2.编写HessianServerProxyExporter类,实现验证

**
* 自定义hessian服务发布,可用于自定义验证服务
*
* @author smiledada
*
*/
public class HessianServerProxyExporter extends HessianServiceExporter {
@Value("${server.userName}")
private String userName;
@Value("${server.passWord}")
private String passWord;

private static final Logger log = LoggerFactory.getLogger(HessianServerProxyExporter.class);

@Override
public void handleRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String authorization = request.getHeader("Authorization");
HessianContext.setRequest(request); //保存Request到Hessian线程上下文
if (StringUtils.isEmpty(authorization)) {
throw new NestedServletException("Auth Is Empty!");
}
String[] authArr = authorization.trim().split(" ");
String auth = authArr[1];
auth = new String(Base64.getDecoder().decode(auth));
String[] namePwdArr = auth.split(":");
String pwd = namePwdArr[1];
String name = namePwdArr[0];
// 验证IP地址
String ipAddress=NetUtils.getIpAddress(request);
log.info(ipAddress+"进入到本系统。。。。。。。。。。");

if (ipAddress.equals("127.0.0.1")){
// 验证密码
if (!passWord.equals(pwd)) {
throw new NestedServletException("密码错误");
}
if (!userName.equals(name)) {
throw new NestedServletException("用户名错误");
}
super.handleRequest(request, response);
}else {
                System.out.println("ip验证失败");
            }
}

}

3.编写Hessian服务api

public interface TestApi {
/**
* 测试
*
* @return
*/
public Map<String, String> testt();

}

4.发布Hessian服务

//发布服务
@Bean(name = "/testApi")
public HessianServiceExporter accountService() {
HessianServerProxyExporter exporter = new HessianServerProxyExporter();
exporter.setService(testApi);
exporter.setServiceInterface(TestApi.class);
return exporter;
}

转载于:https://www.cnblogs.com/smiledada/p/10608510.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/411916.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

aix 7 oracle 10g,在64位aix上安装oracle10g

在aix中安装oracle比linux要方便许多,不需要先设置什么内核参数.设置好oracle用户,组,这些与在linux上安装一样.分配空间,在profile中设置bin目录的路径,oracle_home变量,这些常规的配制就不多说了,大同小异.在aix中,oracle提供了一些工具,可以拿来做安装前的检查工作.工具是va…

为什么我也开博

为什么我也开博&#xff1f;其实很早就想写点东西了&#xff0c;可是一直没有时间&#xff0c;不过&#xff0c;现在想想即使当时写了&#xff0c;还真不知道写点什么。是工作这几个月来的一些经历&#xff1f;还是学习当中的一些小技巧&#xff1f;还是刚刚进入这个行业的困惑…

[vue] 在组件中怎么访问到根实例?

[vue] 在组件中怎么访问到根实例&#xff1f; 通过this.$root个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

2016 hctf fheap 题解

题目链接 https://github.com/zh-explorer/hctf2016-fheap 题目分析 题目功能只有 malloc 和 free 的功能&#xff0c;查看堆的布局&#xff1a; 全局指针没有置空&#xff0c;导致 uaf 和 double free 漏洞&#xff0c;两种都可以做&#xff0c;但是这题的重点是绕过 PIE。 do…

[vue] 在子组件中怎么访问到父组件的实例?

[vue] 在子组件中怎么访问到父组件的实例&#xff1f; 通过this.$parent个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

linux 文件拆分 合并,Linux下文件的切分与合并的简单方法

linux下文件分割可以通过split命令来实现&#xff0c;可以将一个大文件拆分成指定大小的多个文件&#xff0c;并且拆分速度非常的快&#xff0c;可以指定按行数分割和安大小分割两种模式。Linux下文件合并可以通过cat命令来实现&#xff0c;非常简单。在Linux下用split进行文件…

Docker: Jenkins里的pipeline编写基本技巧

Jenkins里&#xff0c;先新建一个pipeline项目 Pipeline Syntax 在Sample Step里选择需要的插件&#xff0c;如果不存在&#xff0c;就去系统管理&#xff0c;插件管理里&#xff0c;进行安装。 如果源码管理工具用的是git,就在下拉里选择git 如果源码管理用的是svn&#xff0c…

[vue] 说说你对Object.defineProperty的理解

[vue] 说说你对Object.defineProperty的理解 Object.defineProperty定义新属性或修改原有的属性&#xff1b; vue的数据双向绑定的原理就是用的Object.defineProperty这个方法&#xff0c;里面定义了setter和getter方法&#xff0c;通过观察者模式&#xff08;发布订阅模式&am…

非等值连接,外连接,自连接,子查询

非等值连接,外连接,自连接,子查询 非等值连接: select empno,ename,sal,grade from emp,salgrade where sal between salgrade.losal and salgrade.hisal; 外连接: select * from emp,dept where dept.deptnoemp.deptno(); 除了部门号相同的外,还加上了emp中没有而dept中包含的…

linux内核模块编写,Linux内核模块编程

1 总体设计思路Linux内核是单体式结构&#xff0c;相对于微内核结构而言&#xff0c;其运行效率高&#xff0c;但是系统的可维护性和可扩展性较差。为此&#xff0c;Linux提供了内核模块(module)机制&#xff0c;它不仅可以弥补单体式内核相对于微内核的一些不足&#xff0c;而…

函数式编程(一)

一、特征 函数式一等公民 强调将计算过程分解成可以复用的函数 纯函数、没有副作用 二、compose function compose(...funcs) {if(funcs.length 0){return (args)> args; }if(funcs.length 1){return funcs[0]; }return funcs.reduce((a,b)>(...args)>b(a(...args))…

[vue] vue组件里写的原生addEventListeners监听事件,要手动去销毁吗?为什么?

[vue] vue组件里写的原生addEventListeners监听事件&#xff0c;要手动去销毁吗&#xff1f;为什么&#xff1f; 需要&#xff0c;原生DOM事件必须要手动销毁&#xff0c;否则会造成内存泄漏个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff…

《解剖PetShop》系列之三

《解剖PetShop》系列之三 三、PetShop数据访问层之消息处理 在进行系统设计时&#xff0c;除了对安全、事务等问题给与足够的重视外&#xff0c;性能也是一个不可避免的问题所在&#xff0c;尤其是一个B/S结构的软件系统&#xff0c;必须充分地考虑访问量、数据流量、服务器负荷…

linux下带密码的scp,linux下带密码的scp

from linux下带密码的scp (2014-03-10 12:35:46)背景&#xff1a; 需要将一台机器的数据传输到另外一台机器上&#xff0c;两台机器没有信任关系&#xff0c;没有数据源一方没有ftp或者http&#xff0c;无法进行wget 解决方法&#xff1a; 在其中一台机器安装expect&#xff0c…

@RestControllerAdvice注解使用

在spring 3.2中&#xff0c;新增了ControllerAdvice&#xff0c;RestControllerAdvice 注解&#xff0c;可以用于定义ExceptionHandler、InitBinder、ModelAttribute&#xff0c;并应用到所有RequestMapping中。参考帮助文档。RestControllerAdvice 是组件注解&#xff0c;他使…

[vue] vue组件会在什么时候下被销毁?

[vue] vue组件会在什么时候下被销毁&#xff1f; 页面关闭、路由跳转、v-if和改变key值个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

简单理解bash和常规操作

1. 什么是bash&#xff1f; Bash shell是一个命令解释器&#xff0c;它是操作系统的外壳程序&#xff0c;负责处理用户命令与操作系统内核之间的交互&#xff0c;当用户输入一个命令并执行时&#xff0c;shell会把命令解释并传递给内核&#xff0c;然后再把内核输出返回给用户&…

linux虚拟机dhcp启动失败,Linux 的dhcp启动异常之No subnet declaration for eth1 (192.168.48.134)...

最近折腾Centos自动化安装&#xff0c;需要的dhcp服务&#xff0c;使用yum -y install dhcp安装dhcp、dhcp-common的rpm包&#xff0c;启动dhcp时异常报错&#xff0c;由于dhcp是及服务&#xff0c;关于dhcp启动失败可以查看操作系统日志/var/log/messages&#xff0c;使用serv…

Developer Express .Net 2005 V7.2.1 crack

Developer Express .Net 2005 V7.2.1破解及下载 http://www.sofitcn.net/ 破解需要注册后才能下载。不要广泛外传&#xff01; 转载于:https://www.cnblogs.com/ainima/archive/2007/07/14/6331513.html

[vue] 使用vue渲染大量数据时应该怎么优化?说下你的思路!

[vue] 使用vue渲染大量数据时应该怎么优化&#xff1f;说下你的思路&#xff01; 1.如果需要响应式&#xff0c;考虑使用虚表&#xff08;只渲染要显示的数据&#xff09;&#xff1b; 2.如果不考虑响应式&#xff0c;变量在beforeCreated或created中声明&#xff08;Object.f…