Orchard Core一分钟搭建ASP.NET Core CMS
Orchard Core 是Orchard CMS的ASP.NET Core版本。 Orchard Core是全新一代的ASP.NET Core CMS。 官方文档介绍:http://orchardcore.readthedocs.io/en/latest/ GitHub: https://github.com/OrchardCMS/OrchardCore 下面快速开始搭建CMS 新建项目 打开VS2017 新建一个CMSWeb的ASP.NET Core Web应用程序 然后选择空模板 安装OrchardCore包 NuGet包命令 目前预览版需加 -Pre Install-Package OrchardCore.Application.Cms.Targets -Pre 或者在NuGet搜索 OrchardCore.Application.Cms.Targets 项目开发 打开Startup.cs ,在ConfigureServices加入
1 |
services.AddOrchardCms(); |
然后删除Configure 中的
1 2 3 4 |
app.Run(async (context) => { await context.Response.WriteAsync("Hello World!"); }); |
加入
1 |
app.UseModules(); |
最终如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
public class Startup { // This method gets called by the runtime. Use this method to add services to the container. // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940 public void ConfigureServices(IServiceCollection services) { services.AddOrchardCms(); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseModules(); } } |
然后运行程序,打开浏览会看到初始化安装界面。输入对应信息,然后完成安装。 注意密码必须包含大小写数字和字符才能成功提交。如上图中出现红色是不行的。 安装好后配置一下,最终如下: 后台为/Admin ,可以进入查看相关设置。 Orchard Core Framework:ASP.NET Core 模块化,多租户框架。 《ASP.NET Core跨平台开发从入门到实战》 京东淘宝亚马逊当当 博客示例代码GitHub:https://github.com/linezero/Blog from:https://www.cnblogs.com/linezero/p/OrchardCore.html
View DetailsSpring Boot(三):Spring Boot 中 Redis 的使用
Spring Boot 对常用的数据库支持外,对 Nosql 数据库也进行了封装自动化。 Redis 介绍 Redis 是目前业界使用最广泛的内存数据存储。相比 Memcached,Redis 支持更丰富的数据结构,例如 hashes, lists, sets 等,同时支持数据持久化。除此之外,Redis 还提供一些类数据库的特性,比如事务,HA,主从库。可以说 Redis 兼具了缓存系统和数据库的一些特性,因此有着丰富的应用场景。本文介绍 Redis 在 Spring Boot 中两个典型的应用场景。 如何使用 1、引入依赖包
1 2 3 4 5 6 7 8 |
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> </dependency> |
Spring Boot 提供了对 Redis 集成的组件包:spring-boot-starter-data-redis,spring-boot-starter-data-redis依赖于spring-data-redis 和 lettuce 。Spring Boot 1.0 默认使用的是 Jedis 客户端,2.0 替换成 Lettuce,但如果你从 Spring Boot 1.5.X 切换过来,几乎感受不大差异,这是因为 spring-boot-starter-data-redis 为我们隔离了其中的差异性。 Lettuce 是一个可伸缩线程安全的 Redis 客户端,多个线程可以共享同一个 RedisConnection,它利用优秀 netty NIO 框架来高效地管理多个连接。 2、添加配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# Redis数据库索引(默认为0) spring.redis.database=0 # Redis服务器地址 spring.redis.host=localhost # Redis服务器连接端口 spring.redis.port=6379 # Redis服务器连接密码(默认为空) spring.redis.password= # 连接池最大连接数(使用负值表示没有限制) 默认 8 spring.redis.lettuce.pool.max-active=8 # 连接池最大阻塞等待时间(使用负值表示没有限制) 默认 -1 spring.redis.lettuce.pool.max-wait=-1 # 连接池中的最大空闲连接 默认 8 spring.redis.lettuce.pool.max-idle=8 # 连接池中的最小空闲连接 默认 0 spring.redis.lettuce.pool.min-idle=0 |
3、添加 cache 的配置类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
@Configuration @EnableCaching public class RedisConfig extends CachingConfigurerSupport{ @Bean public KeyGenerator keyGenerator() { return new KeyGenerator() { @Override public Object generate(Object target, Method method, Object... params) { StringBuilder sb = new StringBuilder(); sb.append(target.getClass().getName()); sb.append(method.getName()); for (Object obj : params) { sb.append(obj.toString()); } return sb.toString(); } }; } } |
注意我们使用了注解:@EnableCaching来开启缓存。 3、好了,接下来就可以直接使用了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
@RunWith(SpringRunner.class) @SpringBootTest public class TestRedis { @Autowired private StringRedisTemplate stringRedisTemplate; @Autowired private RedisTemplate redisTemplate; @Test public void test() throws Exception { stringRedisTemplate.opsForValue().set("aaa", "111"); Assert.assertEquals("111", stringRedisTemplate.opsForValue().get("aaa")); } @Test public void testObj() throws Exception { User user=new User("aa@126.com", "aa", "aa123456", "aa","123"); ValueOperations<String, User> operations=redisTemplate.opsForValue(); operations.set("com.neox", user); operations.set("com.neo.f", user,1, TimeUnit.SECONDS); Thread.sleep(1000); //redisTemplate.delete("com.neo.f"); boolean exists=redisTemplate.hasKey("com.neo.f"); if(exists){ System.out.println("exists is true"); }else{ System.out.println("exists is false"); } // Assert.assertEquals("aa", operations.get("com.neo.f").getUserName()); } } |
以上都是手动使用的方式,如何在查找数据库的时候自动使用缓存呢,看下面; 4、自动根据方法生成缓存
1 2 3 4 5 6 7 8 9 10 11 |
@RestController public class UserController { @RequestMapping("/getUser") @Cacheable(value="user-key") public User getUser() { User user=new User("aa@126.com", "aa", "aa123456", "aa","123"); System.out.println("若下面没出现“无缓存的时候调用”字样且能打印出数据表示测试成功"); return user; } } |
其中 value 的值就是缓存到 Redis 中的 key 共享 Session 分布式系统中,Session 共享有很多的解决方案,其中托管到缓存中应该是最常用的方案之一, Spring Session 官方说明 Spring Session provides an API and implementations for […]
View DetailsRabbitMQ与AMQP协议详解
1. 消息队列的历史 了解一件事情的来龙去脉,将不会对它感到神秘。让我们来看看消息队列(Message Queue)这项技术的发展历史。 Message Queue的需求由来已久,80年代最早在金融交易中,高盛等公司采用Teknekron公司的产品,当时的Message queuing软件叫做:the information bus(TIB)。 TIB被电信和通讯公司采用,路透社收购了Teknekron公司。之后,IBM开发了MQSeries,微软开发了Microsoft Message Queue(MSMQ)。这些商业MQ供应商的问题是厂商锁定,价格高昂。2001年,Java Message queuing试图解决锁定和交互性的问题,但对应用来说反而更加麻烦了。 于是2004年,摩根大通和iMatrix开始着手Advanced Message Queuing Protocol (AMQP)开放标准的开发。2006年,AMQP规范发布。2007年,Rabbit技术公司基于AMQP标准开发的RabbitMQ 1.0 发布。 目前RabbitMQ的最新版本为3.5.7,基于AMQP 0-9-1。 RabbitMQ采用Erlang语言开发。Erlang语言由Ericson设计,专门为开发concurrent和distribution系统的一种语言,在电信领域使用广泛。OTP(Open Telecom Platform)作为Erlang语言的一部分,包含了很多基于Erlang开发的中间件/库/工具,如mnesia/SASL,极大方便了Erlang应用的开发。OTP就类似于Python语言中众多的module,用户借助这些module可以很方便的开发应用。 2. AMQP messaging 中的基本概念 Broker: 接收和分发消息的应用,RabbitMQ Server就是Message Broker。 Virtual host: 出于多租户和安全因素设计的,把AMQP的基本组件划分到一个虚拟的分组中,类似于网络中的namespace概念。当多个不同的用户使用同一个RabbitMQ server提供的服务时,可以划分出多个vhost,每个用户在自己的vhost创建exchange/queue等。 Connection: publisher/consumer和broker之间的TCP连接。断开连接的操作只会在client端进行,Broker不会断开连接,除非出现网络故障或broker服务出现问题。 Channel: 如果每一次访问RabbitMQ都建立一个Connection,在消息量大的时候建立TCP Connection的开销将是巨大的,效率也较低。Channel是在connection内部建立的逻辑连接,如果应用程序支持多线程,通常每个thread创建单独的channel进行通讯,AMQP method包含了channel id帮助客户端和message broker识别channel,所以channel之间是完全隔离的。Channel作为轻量级的Connection极大减少了操作系统建立TCP connection的开销。 Exchange: message到达broker的第一站,根据分发规则,匹配查询表中的routing key,分发消息到queue中去。常用的类型有:direct (point-to-point), topic (publish-subscribe) and fanout (multicast)。 Queue: 消息最终被送到这里等待consumer取走。一个message可以被同时拷贝到多个queue中。 Binding: exchange和queue之间的虚拟连接,binding中可以包含routing key。Binding信息被保存到exchange中的查询表中,用于message的分发依据。 3. 典型的“生产/消费”消息模型 生产者发送消息到broker server(RabbitMQ)。在Broker内部,用户创建Exchange/Queue,通过Binding规则将两者联系在一起。Exchange分发消息,根据类型/binding的不同分发策略有区别。消息最后来到Queue中,等待消费者取走。 4. Exchange类型 Exchange有多种类型,最常用的是Direct/Fanout/Topic三种类型。 Direct Message中的“routing key”如果和Binding中的“binding key”一致, Direct exchange则将message发到对应的queue中。 Fanout 每个发到Fanout类型Exchange的message都会分到所有绑定的queue上去。 Topic 根据routing key,及通配规则,Topic exchange将分发到目标queue中。 Routing key中可以包含两种通配符,类似于正则表达式:
1 2 |
“<span class="hljs-comment">#”通配任何零个或多个word “*”通配任何单个<span class="hljs-built_in">word</span></span> |
这里也推荐给想要了解RabbitMQ的同学一个网站,http://tryrabbitmq.com ,它提供在线RabbitMQ 模拟器,可以帮助理解Exchange/queue/binding概念。 至此,我们对于消息队列的发展,RabbitMQ的产生,以及AMQP协议中的重要概念做了一个完整的介绍。 from:https://www.cnblogs.com/frankyou/p/5283539.html
View DetailsSpring Boot(二):Web 综合开发
上篇文章介绍了 Spring Boot 初级教程:Spring Boot(一):入门篇,方便大家快速入门、了解实践 Spring Boot 特性;本篇文章接着上篇内容继续为大家介绍 Spring Boot 的其它特性(有些未必是 Spring Boot 体系桟的功能,但是是 Spring 特别推荐的一些开源技术本文也会介绍),对了这里只是一个大概的介绍,特别详细的使用我们会在其它的文章中来展开说明。 Web 开发 Spring Boot Web 开发非常的简单,其中包括常用的 json 输出、filters、property、log 等 json 接口开发 在以前使用 Spring 开发项目,需要提供 json 接口时需要做哪些配置呢 添加 jackjson 等相关 jar 包 配置 Spring Controller 扫描 对接的方法添加 @ResponseBody 就这样我们会经常由于配置错误,导致406错误等等,Spring Boot 如何做呢,只需要类添加 @RestController 即可,默认类中的方法都会以 json 的格式返回
1 2 3 4 5 6 7 8 9 10 |
@RestController public class HelloController { @RequestMapping("/getUser") public User getUser() { User user=new User(); user.setUserName("小明"); user.setPassWord("xxxx"); return user; } } |
如果需要使用页面开发只要使用@Controller注解即可,下面会结合模板来说明 自定义 Filter 我们常常在项目中会使用 filters 用于记录调用日志、排除有 XSS 威胁的字符、执行权限验证等等。Spring Boot 自动添加了 OrderedCharacterEncodingFilter 和 HiddenHttpMethodFilter,并且我们可以自定义 Filter。 两个步骤: 实现 Filter 接口,实现 Filter 方法 添加@Configuration 注解,将自定义Filter加入过滤链 好吧,直接上代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
@Configuration public class WebConfiguration { @Bean public RemoteIpFilter remoteIpFilter() { return new RemoteIpFilter(); } @Bean public FilterRegistrationBean testFilterRegistration() { FilterRegistrationBean registration = new FilterRegistrationBean(); registration.setFilter(new MyFilter()); registration.addUrlPatterns("/*"); registration.addInitParameter("paramName", "paramValue"); registration.setName("MyFilter"); registration.setOrder(1); return registration; } public class MyFilter implements Filter { @Override public void destroy() { // TODO Auto-generated method stub } @Override public void doFilter(ServletRequest srequest, ServletResponse sresponse, FilterChain filterChain) throws IOException, ServletException { // TODO Auto-generated method stub HttpServletRequest request = (HttpServletRequest) srequest; System.out.println("this is MyFilter,url :"+request.getRequestURI()); filterChain.doFilter(srequest, sresponse); } @Override public void init(FilterConfig arg0) throws ServletException { // TODO Auto-generated method stub } } } |
自定义 Property 在 Web 开发的过程中,我经常需要自定义一些配置文件,如何使用呢 配置在 application.properties 中
1 2 |
com.neo.title=纯洁的微笑 com.neo.description=分享生活和技术 |
自定义配置类
1 2 3 4 5 6 7 8 9 10 |
@Component public class NeoProperties { @Value("${com.neo.title}") private String title; @Value("${com.neo.description}") private String description; //省略getter settet方法 } |
log配置 […]
View DetailsSpringBoot学习资料汇总
推荐博客 纯洁的微笑 程序猿DD liaokailin的专栏 Spring Boot 揭秘与实战 系列 catoop的专栏 简书Spring Boot专题 方志朋Spring Boot 专栏 Spring-boot集成 推荐网站 Spring boot 官网 Spring Boot参考指南-中文版 Gradle 中文参考指南 慕课网视频 spring-boot-tutorials 开源书籍-微服务:从设计到部署 开源代码 spring boot官方例子 spring-boot-examples SpringBoot-Learning favorites-web springboot-learning-example spring-boot-all from:http://www.ityouknow.com/springboot/2015/12/30/springboot-collect.html
View DetailsSpringBoot 项目,自动编译,热部署,立刻看到效果
1:在pom.xml 中 配置
1 2 3 4 5 |
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency> |
注意:并不是pom.xml 的<build>标签中 2: 如果有页面的话 禁止页面缓存
1 2 3 4 5 6 7 8 9 |
spring: application: name: XXX aop: proxy-target-class: true thymeleaf: cache: false prefix: classpath:/templates/ mode: LEGACYHTML5 |
3:开idea工具的自动编译功能 完成以上步骤 即可实现SpringBoot项目自动编译+热部署,这我们修改后的代码能够立刻看到效果,提高效率! from:https://blog.csdn.net/woshiyeguiren/article/details/79312245 转者PS:其他构建工具可以去http://mvnrepository.com/搜索~
View DetailsSpring Boot(一):入门篇
什么是 Spring Boot Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。用我的话来理解,就是 Spring Boot 其实不是什么新的框架,它默认配置了很多框架的使用方式,就像 Maven 整合了所有的 Jar 包,Spring Boot 整合了所有的框架。 使用 Spring Boot 有什么好处 其实就是简单、快速、方便!平时如果我们需要搭建一个 Spring Web 项目的时候需要怎么做呢? 1)配置 web.xml,加载 Spring 和 Spring mvc 2)配置数据库连接、配置 Spring 事务 3)配置加载配置文件的读取,开启注解 4)配置日志文件 … 配置完成之后部署 Tomcat 调试 … 现在非常流行微服务,如果我这个项目仅仅只是需要发送一个邮件,如果我的项目仅仅是生产一个积分;我都需要这样折腾一遍! 但是如果使用 Spring Boot 呢? 很简单,我仅仅只需要非常少的几个配置就可以迅速方便的搭建起来一套 Web 项目或者是构建一个微服务! 使用 Spring Boot 到底有多爽,用下面这幅图来表达 快速入门 说了那么多,手痒痒的很,马上来一发试试! Maven 构建项目 1、访问 http://start.spring.io/ 2、选择构建工具 Maven Project、Java、Spring Boot 版本 2.1.3 以及一些工程基本信息,可参考下图所示: 3、点击 Generate Project 下载项目压缩包 4、解压后,使用 Idea 导入项目,File -> New -> Model from Existing Source.. -> 选择解压后的文件夹 -> OK,选择 Maven 一路 […]
View Detailsweex
2016年4月21日,阿里巴巴在Qcon大会上宣布开源跨平台移动开发工具Weex,Weex能够完美兼顾性能与动态性,让移动开发者通过简捷的前端语法写出Native级别的性能体验,并支持iOS、安卓、YunOS及Web等多端部署。 对于移动开发者来说,Weex主要解决了频繁发版和多端研发两大痛点,同时解决了前端语言性能差和显示效果受限的问题。开发者可通过Weex官网申请内测。(http://alibaba.github.io/weex/) 开发者只需要在自己的APP中嵌入Weex的SDK,就可以通过撰写HTML/CSS/JavaScript来开发Native级别的Weex界面。Weex界面的生成码其实就是一段很小的JS,可以像发布网页一样轻松部署在服务端,然后在APP中请求执行。 与 现有的开源跨平台移动开放项目如Facebook的React Native和微软的Cordova(开源中国小编的失误,还是勾股的?)相比,Weex更加轻量,体积小巧。因为基于web conponent标准,使得开发更加简洁标准,方便上手。Native组件和API都可以横向扩展,方便根据业务灵活定制。Weex渲染层具备优异的性 能表现,能够跨平台实现一致的布局效果和实现。对于前端开发来说,Weex能够实现组件化开发、自动化数据绑定,并拥抱Web标准。 突出特点: 致力于移动端,充分调度 native 的能力 充分解决或回避性能瓶颈 灵活扩展,多端统一,优雅“降级”到 HTML5 保持较低的开发成本和学习成本 快速迭代,轻量实时发布 融入现有的 native 技术体系 工程化管理和监控等 轻量:体积小巧,语法简单,方便接入和上手 可扩展:业务方可去中心化横向定制组件和功能模块 高性能:高速加载、高速渲染、体验流畅 from:https://www.oschina.net/p/weex
View DetailsJenkins远程代码执行漏洞检查(CVE-2017-1000353)
Jenkins的反序列化漏洞,攻击者使用该漏洞可以在被攻击服务器执行任意代码,漏洞利用不需要任何的权限 漏洞影响范围: 所有Jenkins主版本均受到影响(包括<=2.56版本) 所有Jenkins LTS 均受到影响( 包括<=2.46.1版本) 测试步骤: 1.下载生成反序列的payload: https://github.com/nobleXu/jenkins 2.生成一个jenkins_poc1.ser反序列文件 java -jar jenkins_payload.jar jenkins_poc1.ser "ping www.baidu.com" 3.下载jenkins.py文件: 下载链接: https://pan.baidu.com/s/1misPilU 密码: 6qqh 4.编辑jenkins.py文件,修改url地址: 5.执行jenkins.py: python3 exploit.py 6.通过dnslog可以看到反序列请求日志记录: 测试总结: Jenkins运行环境是在linux下,win环境利用不成功 参考文献: https://github.com/phith0n/vulhub/tree/master/jenkins/CVE-2017-1000353 https://blogs.securiteam.com/index.php/archives/3171 https://xianzhi.aliyun.com/forum/read/1567.html from:https://www.cnblogs.com/backlion/p/6813260.html
View Details