Java EE

VUE路由history模式坑记--NGINX

房东的猫 提交于 2020-11-30 23:27:43
因微信分享和自动登录需要, 对于URL中存在'#'的地址,处理起来比较坑(需要手动写一些代码来处理)。还有可能会有一些隐藏的问题没被发现。 如果VUE能像其他(JSP/PHP)系统的路径一样,就不存在这些问题了。 对于VUE的router[mode: history]模式在开发的时候,一般都不出问题。是因为开发时用的服务器为node,Dev环境中自然已配置好了。 但对于放到nginx下运行的时候,自然还会有其他注意的地方。总结如下: 在nginx里配置了以下配置后, 可能首页没有问题,链接也没有问题,但在点击刷新后,页面就无法显示了(404) location / { root /data/nginx/ html; index index.html index.htm; } 为了解决404,需要通过以下两种方式: 方式一 location / { root /data/nginx/ html; index index.html index.htm; error_page 404 / index.html; } 方式二 location / { root /data/nginx/ html; index index.html index.htm; if (!- e $request_filename) { rewrite ^/(.*) / index.html last; break

JVM调优不知道怎么回答,阿里总结四大模块,学不会就背过来

我的梦境 提交于 2020-11-30 23:18:10
一个 web 应用不是一个孤立的个体,它是一个系统的部分,系统中的每一部分都会影响整个系统的性能,而并发量就是这个系统最重要的组成部分之一,它最大程度的影响着用户体验度,就像是一条高速公路,在这条高速上奔跑的汽车最关心的不就是这条高速是否会堵车啊,所以在高速设计(系统开发)的时候就要着手考虑这件事,尤其是现在的生活中,很多的朋友在面试的时候也经常被问到一个问题:JVM调优,那不清楚应该怎么处理怎么办,没关系,我来了,看完这篇文章,哪怕你从来没有调优经验也可以和面试官扯皮 个人公众号:Java架构师联盟,每日更新技术好文 话不多说,看重点 1. 常用的性能评价/测试指标 在调优之前,起码你要清楚你再进行调优的时候都要有哪些关注点吧,知己知彼才能百战不殆啊,那我们就来看一下都有哪些常用的性能测试指标 1.1 响应时间 提交请求和返回该请求的响应之间使用的时间,一般比较关注平均响应时间。 常用操作的响应时间列表: 1.2 并发数 同一时刻,对服务器有实际交互的请求数。 和网站在线用户数的关联:1000 个同时在线用户数,可以估计并发数在 5%到 15%之间, 也就是同时并发数在 50~150 之间。 1.3 吞吐量 对单位时间内完成的工作量(请求)的量度 1.4 关系 系统吞吐量和系统并发数以及响应时间的关系: 以高速公路的通行状况: 吞吐量是每天通过收费站的车辆数目

一次SQL注入导致的"越权"

旧巷老猫 提交于 2020-11-30 14:57:05
原文来自 SecIN社区 —作者:tkswifty 相关背景   在实际的业务开发中,SQL交互往往是业务系统中不可或缺的一项。在Java中提供了类似Mybatis、Hibernate、SpringData JPA等来满足相关的数据库交互需要。但是由于种种原因,开发人员在处理应用程序和数据库交互时,使用字符串拼接的方式构造SQL语句,导致了SQL注入问题。那么有时候面对大量的接口存在SQL注入,迭代困难的时候,过滤器/拦截器便是很多开发人员的首选,通过过滤相关的SQL关键字,避免SQL注入得到进一步利用。   针对上述场景,很多时候需要加检查过滤器设计是否严谨,检查是否有漏网之鱼,导致SQL注入漏洞被攻击者进行利用。前段时间审计某项目时发现一处SQL注入导致的"越权",以下是相关的过程。 挖掘过程   系统基于SpringMVC进行开发,业务主要是与简历编辑相关。相关的问题接口主要在修改个人简历处。一般来说,这种修改个人信息的业务,除了修改内容以外,主要传递两个关键信息: 当前用户的身份凭证userId 当前用户的业务编号(这里是简历),resumeId   在进行接口业务请求时,将业务相关的关键参数userid聪当前用户的身份凭证(一般是session)获取,绑定个人用户身份,然后从前端获取需要修改的resumeId,最后在保存信息进行SQL交互时

HttpServletResponse类的介绍和使用+解决响应传递给客户端数据的中文乱码问题

一曲冷凌霜 提交于 2020-11-30 11:54:00
HttpServletResponse类作用 HttpServletResponse类和HttpServletRequest类一样。每次请求进来,Tomcat服务器都会创建一个Response对象传递给Servlet程序去使用。HttpServletRequest表示请求过来的信息,HttpServletResponse表示所有响应的信息 我们如果需要设置返回给客户端的信息,都可以通过HttpServletResponse对象来进行设置 他是通过流来给客户端传递数据的 响应有两个流,如下 两个输出流的说明 左边是名称,中间是获取这些流的方法,右边是作用 字节流 getOutputStream() 常用于下载(传递二进制数据) 字符流 getWriter() 常用于回传字符串(非常常用) 两个流同时只能使用一个,也就是用了字节流就不能用字符流了,用了字符流就不能用字节流了 比如我们同时用一下这两个方法: 然后我们运行 报错了,说我们用了一个就不要用另一个了 向客户端传数据 要求,向客户端回传字符串数据 步骤 获取字符流 向客户端回传数据 我们先定义一个PrintWriter对象来接收获取到的字符流对象 然后通过字符流对象的printin()方法或者write()的方法向客户端回传数据 括号中填入我们需要回传的字符 这个东西如果只是传递回英文是没有任何问题的,但是如果我们传递的数据中文

阿里面试回来,想和Java程序员谈一谈

佐手、 提交于 2020-11-30 07:31:26
引言 其实本来真的没打算写这篇文章,主要是LZ得记忆力不是很好,不像一些记忆力强的人,面试完以后,几乎能把自己和面试官的对话都给记下来。LZ自己当初面试完以后,除了记住一些聊过的知识点以外,具体的内容基本上忘得一干二净,所以写这篇文章其实是很有难度的。 但是,最近问LZ的人实在是太多了,为了避免重复回答,给自己省点力气,干脆就在这里统一回复了。 其实之前LZ写过一篇文章,但是那篇文章更多的是在讨论“面试前该不该刷题”这个话题,而这篇文章将会更加聚焦在面试前如何准备,以及工作当中如何学习这个话题上,而且会尽量写出一些干货。 第一个问题:阿里面试都问什么? 这个是让LZ最头疼的一个问题,也是群里的猿友们问的最多的一个问题。 说实话,LZ只能隐约想起并发、JVM、分布式、TCP/IP协议这些个关键字,具体的问题真的是几乎都没记住。而且就算LZ记住了,也告诉你了,你也背会了,但LZ觉得,在面试中,你被问到一模一样问题的可能性依然很小。 甚至,就算你运气好被问到了,你也照着背下来了,也不一定就能对你的面试起到正面的作用,因为面试官万一多问一句,你可能就露馅了,那还不如干脆点说不会更好。 LZ参加的是阿里的社招面试,而社招不同于校招,问题的范围其实是很随机的。因为能参加一些比较知名的互联网公司社招的人,70%以上都会有个3-5年的经验。这倒不是说一两年经验的同学没有机会进这些公司

Intellij IDEA创建spring MVC项目

…衆ロ難τιáo~ 提交于 2020-11-30 03:36:21
相信各位未来的Java工程师已经接触到了spring MVC这个框架的强大之处,看了很多的教程,都是eclipse的,在intellij IDEA这个强大的工具面前居然不能很顺畅的,今天我就带领大家用IDEA创建Hello World程序。 注: 1、本文只讲解怎么用intellij IDEA进行创建spring MVC项目,并不会讲解具体的spring MVC框架基础,如需了解框架原理,请移步其他教程。 2、本文是我在刚学习Spring MVC框架中,看了很多的教程,经过了前前后后很多的坑点进行编写,不足之处,多多指点,谢谢 环境: intellij IDEA 2017 CI JDK 1.8 tomcat 8.5.23 具体步骤 1、新建项目 勾选Spring MVC 、Web Application(勾选了Spring MVC后IDEA默认会勾选Web Application),Next 2、填写项目名、项目路径 这里项目名我用简单的springmvcdemo,路径就使用默认路径,Finish 3、创建文件夹如图 classes、lib文件夹我建议和我文件夹名相同(只是建议)、路径我建议也相同,其他两个文件夹看个人爱好哈。 4、导入相关jar包(IDEA自动导入) 在IDEA中其实已经给我们自动导入了相关jar,只不过我们需要在WEB-INF目录下导入相关jar包

spring与shiro整合

两盒软妹~` 提交于 2020-11-30 01:27:53
spring与shiro整合 (1)加入所需要是jar包 (2)配置shiro Filter(web.xml) <!-- shiro过虑器,DelegatingFilterProxy通过代理模式将spring容器中的bean和filter关联起来 --> < filter > < filter-name > shiroFilter </ filter-name > < filter-class > org.springframework.web.filter.DelegatingFilterProxy </ filter-class > <!-- 设置true由servlet容器控制filter的生命周期 --> < init-param > < param-name > targetFilterLifecycle </ param-name > < param-value > true </ param-value > </ init-param > <!-- 设置spring容器filter的bean id,如果不设置则找与filter-name一致的bean --> < init-param > < param-name > targetBeanName </ param-name > < param-value > shiroFilter </ param-value >

阿里面试回来,想和Java程序员谈一谈

馋奶兔 提交于 2020-11-30 01:25:10
引言 其实本来真的没打算写这篇文章,主要是LZ得记忆力不是很好,不像一些记忆力强的人,面试完以后,几乎能把自己和面试官的对话都给记下来。LZ自己当初面试完以后,除了记住一些聊过的知识点以外,具体的内容基本上忘得一干二净,所以写这篇文章其实是很有难度的。 但是,最近问LZ的人实在是太多了,为了避免重复回答,给自己省点力气,干脆就在这里统一回复了。 其实之前LZ写过一篇文章,但是那篇文章更多的是在讨论“面试前该不该刷题”这个话题,而这篇文章将会更加聚焦在面试前如何准备,以及工作当中如何学习这个话题上,而且会尽量写出一些干货。 第一个问题:阿里面试都问什么? 这个是让LZ最头疼的一个问题,也是群里的猿友们问的最多的一个问题。 说实话,LZ只能隐约想起并发、JVM、分布式、TCP/IP协议这些个关键字,具体的问题真的是几乎都没记住。而且就算LZ记住了,也告诉你了,你也背会了,但LZ觉得,在面试中,你被问到一模一样问题的可能性依然很小。 甚至,就算你运气好被问到了,你也照着背下来了,也不一定就能对你的面试起到正面的作用,因为面试官万一多问一句,你可能就露馅了,那还不如干脆点说不会更好。 LZ参加的是阿里的社招面试,而社招不同于校招,问题的范围其实是很随机的。因为能参加一些比较知名的互联网公司社招的人,70%以上都会有个3-5年的经验。这倒不是说一两年经验的同学没有机会进这些公司

MyBatis的理解

跟風遠走 提交于 2020-11-29 03:50:53
MyBatis概念: MyBatis 是一个实现了 JPA 规范的用来连接数据库并对其进行增删改查操作的开源框架 (就和传统的JDBC一样,就是个连接数据库的东西),其实,它底层就是一个JDBC封装的组件。 MyBatis 的前身是 Ibatis , Ibatis 创建与2002年最初为 Apache 下面的一个开源项目,2010迁移到google code下面并改名为 MyBatis 。 MyBatis 虽然实现了 JPA 但是它并不是一个完完全全的 ORM 组件,而是一个基于 SQL 开发的半 ORM 组件。 ORM: ORM (Object-Relationship-Mapping):是对象关系映射的意思,它是一种思想,是指将数据库中的每一行数据用对象的形式表现出来。 JPA: JPA (Java-Persistence-API):是Java持久化接口的意思,它是JavaEE关于 ORM 思想的一套标准接口,仅仅是一套接口,不是具体的实现。 MyBatis的优点 : 1、 简单易学,容易上手(相比于Hibernate) ---- 基于SQL编程 2、 消除了JDBC大量冗余的代码,不需要手动开关连接 3、 很好的与各种数据库兼容(因为MyBatis使用JDBC来连接数据库,所以只要JDBC支持的数据库MyBatis都支持,而JDB提供了可扩展性

一言难尽,Jpa这个功能差点让我丢了工作

北城以北 提交于 2020-11-29 03:30:33
故事背景 前阵子,有位朋友在微信上问我数据被删了能不能恢复,我问了下原因,居然是因为一个配置项惹的祸。 故事细节 在 Spring Boot 中使用 jpa 来操作数据库,jpa 就不做详细的介绍了,相信大家都有所了解或者也用过。 在 jpa 中有一个配置项,可以让程序在启动的时候自动初始化表结构或者更新表结构的功能。听上去很不错,非常实用。 其实这是一个非常危险的功能,个人觉得不应该提供这种功能,只要留了口子就有可能会出问题。 这个配置就是: spring.jpa.hibernate.ddl-auto create( 危险系数 2 颗星 ) 应用启动的时候,如果数据库中没有对应的表,就会自动根据实体类的结构创建一个表结构。如果表已经存在了就会将表中的数据清空。 create-drop( 危险系数 3 颗星 ) 应用启动的时候,如果数据库中没有对应的表,就会自动根据实体类的结构创建一个表结构。如果表已经存在了就会将表中的数据清空。 程序停止的时候会将数据库中所有表删除掉。 update( 危险系数 1 颗星 ) 应用启动的时候,如果数据库中没有对应的表,就会自动根据实体类的结构创建一个表结构。如果表已经存在了就会判断有没有新增字段或者修改长度之类的,如果有则会更新表结构,不会影响数据。 validate( 危险系数 0 颗星 ) validate 不会更新和删除表或者数据