Java EE

spring security进阶 使用数据库中的账户和密码认证

跟風遠走 提交于 2020-05-07 19:11:35
spring security 使用数据库中的账户和密码认证 [TOC] 示例工程地址 一、原理分析 前台的登录请求发送到后端后会由spring security进行拦截,即controller层由框架自己提供。这样用户名和密码的认证就需要在service层完成,所以框架需要在service层获取到我们自己的数据库账号信息。 spring security 提供了一个接口 **UserDetailsService **来让用户提供账号和密码,其内容如下 public interface UserDetailsService { UserDetails loadUserByUsername(String username) throws UsernameNotFoundException; } 用户实现这个接口中的loadUserByUsername方法,通过数据库中查询的账号和密码构造一个UserDetails对象返回给spring security,然后框架自己完成认证操作。 其中UserDetails也是一个接口,spring security用它来封装当前进行认证的用户信息 public interface UserDetails extends Serializable { Collection<? extends GrantedAuthority>

spring security之web应用安全

别说谁变了你拦得住时间么 提交于 2020-05-07 19:05:28
一、什么是web应用安全,为了安全我们要做哪些事情? 保护web资源不受侵害(资源:用户信息、用户财产、web数据信息等) 对访问者的认证、授权,指定的用户才可以访问资源 访问者的信息及操作得到保护(xss csrf sql注入等) 开发中我们需要注意的项: 1. 【高危】网络关键数据传输加密 1. 【高危】站点使用https方式部署 2. 【高危】文件传输时,过滤与业务无关的文件类型 3. 【高危】接口开发,应预防泄露敏感数据 4. 【高危】预防url中带url跳转参数 5. 【中危】预防CSRF攻击 6. 【中危】预防短信恶意重发 7. 【中危】预防暴力破解图片验证码 8. 【低危】通过httponly预防xss盗取cookie信息 9. 【低危】设置http协议安全的报文头属性 ...... 二、为什么要聊spring security? spring security在很多安全防护上很容易实现 理解spring security的抽象有助于养成面向对象思维 可以为理解spring security oauth2做铺垫 三、先搞清楚两大概念:认证、授权 Application security boils down to two more or less independent problems: authentication (who are you?) and

Java-API-Package:java.sql百科

[亡魂溺海] 提交于 2020-05-07 18:38:33
ylbtech-Java-API-Package:java.sql百科 提供使用 JavaTM 编程语言 访问并处理存储在 数据源 (通常是一个关系数据库)中的数据的 API。 此 API 包括一个 框架 ,凭借此框架可以 动态地安装不同驱动程序来访问不同数据源 。 1、 中文名:java.sql 用 于:将 SQL 语句传递给数据库 性 质:API 分 类:SQL 类型 目录 1 描述 2 sql包内容 3 JDBC内容 ▪ TM3.0API ▪ TM4.0API 4 JDBC特性 ▪ 4.0特性 ▪ 3.0特性 ▪ 2.1特性 5 用途 6 JDBCAPI ▪ JDBC ▪ 优缺点 ▪ 支持 7 一致性 2、 1. 返回顶部 1、 描述 JDBC TM API 主要用于 将 SQL 语句传递给数据库 ,但它还可以用于 以表格方式从任何数据源中读写数据 。通过接口的 javax.sql.RowSet 组 可以使用的 reader/writer 实用程序 ,可以被定制以 使用和更新 来自 电子表格 、 纯文本文件 或其他任何表格式数据源 的数据。 sql包内容 java.sql 包中包含用于以下方面的 API: 通过 DriverManager 实用程序建立与数据库的连接 DriverManager 类:建立与驱动程序的连接 SQLPermission 类:代码在 Security

第一篇博客----java程序员的成长之旅

自古美人都是妖i 提交于 2020-05-07 18:23:52
#第一篇博客---java程序员的成长之旅 ##自我介绍: <p style="font-size:18px;color:green;">我目前就读于杭州某大学,刚上大三,网络工程专业。</p> <p style="font-size:18px;color:green;">由于厌倦了校园读书的生涯,并不像周围的同学一样计划考研,因此,我目前计划想要毕后找到一份工作。</p> <p style="font-size:18px;color:green;">但是我相信经历过大学的同学都知道,特别是我们做技术这一行的,大学的技术都是自学的,课堂上老师讲解的内容大多是一些琐碎的理论知识,是不能马上应用于实践的,要把大学学的理论知识转化为实践指导,还需要一段很长的路要走。 </p> <p style="font-size:18px;color:green;">为了工作的需要,本人必须要自学一门可以立即被公司所接受的技术,经过一学期的尝试,我最后选择了java后端开发作为毕业进入IT圈的敲门砖</p> <p style="font-size:18px;color:green;">以下是我在尝试和寻找路线过程中总结的一套java学习路线,希望能够给想要从事开发工作的小伙们一些帮助</p> #java学习路线 ##第一阶段: HTML CSS Java基础 <p style="font-size

java中spring框架的页面编码问题集锦

时光总嘲笑我的痴心妄想 提交于 2020-05-07 17:49:16
解决 springMVC 中文乱码问题( jsp 页面编码为 utf-8 ) 1. 表单提交 controller 获得中文参数后乱码解决方案 Form 表单提交方式必须为 post ,get 方式 spring 过滤器不起作用 < %@ page language="java" import="java.util.*" pageEncoding="UTF-8"% > < form action="${ctx}/user/addUser" name="userForm" method="post" > 解决方案: 修改 web.xml ,增加编码过滤器 < filter> <filter-name> characterEncodingFilter </filter-name> <filter-class> org.springframework.web.filter.CharacterEncodingFilter </filter-class> <init-param> <param-name> encoding </param-name> <param-value> UTF-8 </param-value> </init-param> <init-param> <param-name> forceEncoding </param-name> <param-value> true

JavaWeb项目WebContent下的资源文件无法引用

☆樱花仙子☆ 提交于 2020-05-07 17:41:30
JavaWeb项目引用资源的时候尽量使用绝对路径。 作者在帮助同学完善其JavaWeb项目端页面的时候,css样式文件怎么也引用不了。 第一个想到的是:是不是文件路径写错了? 于是,作者换了绝对路径,然而,依旧无法引用资源。 然而检查之后发现文件路径没有问题,就是引用不了。 项目截图如下所示: 图1.项目截图 在浏览器进行调试,发现引用的资源layui.css显示404错误,即未找到资源。 图2.项目调试 经高人指点,发现是web.xml里servlet拦截器为将.css列入匹配规则里,导致.css资源被拦截,从而无法引用。 解决方法: 在的 中添加 匹配规则,具体如下图所示: 图3.项目配置文件 来源: oschina 链接: https://my.oschina.net/u/4352236/blog/4148740

jsp页面表单提交,controller接收乱码,数据库乱码等解决方法

北城以北 提交于 2020-05-07 16:40:56
1.web项目出现乱码问题 做web项目的时候,多多少少会出现中文乱码问题。 对于jsp页面表单提交,controller接收乱码,保存到数据库中文乱码等问题,统一给出几种乱码的解决方式。 1.项目编码没有设置为utf8 有一些普遍的乱码问题,是因为我们在创建web项目或者是导入别人的web项目的时候,没有设置项目的编码。项目没设置utf-8编码会导致中文乱码。 2.确保数据库编码为utf8,以mysql为例,可到mysql目录下,my.ini文件中修改后,重启mysql服务 重启mysql服务方法: 3.数据库建库时,确认编码为utf-8,以使用Navicat为例 4.在jsp页面乱码问题 可以在 jsp的顶端加入; < %@ page language=”java” import=”java.util. *” pageEncoding=”UTF- 8” %> 1 Head中加入 < meta http-equiv= ”Content-Type” content= ”text/ html; charset= UTF-8”> 1 form表单的提交方式设为 “Post” 5.如果使用的是spring,可以在项目的web.xml中加入: < filter> < filter-name>characterEncodingFilter</ filter-name> < filter

Re:从零开始的Spring Session(一)

可紊 提交于 2020-05-07 16:36:08
Session和Cookie这两个概念,在学习java web开发之初,大多数人就已经接触过了。最近在研究跨域单点登录的实现时,发现对于Session和Cookie的了解,并不是很深入,所以打算写两篇文章记录一下自己的理解。在我们的应用集成Spring Session之前,先补充一点Session和Cookie的关键知识。 Session与Cookie基础 由于http协议是无状态的协议,为了能够记住请求的状态,于是引入了Session和Cookie的机制。我们应该有一个很明确的概念,那就是Session是存在于服务器端的,在单体式应用中,他是由tomcat管理的,存在于tomcat的内存中,当我们为了解决分布式场景中的session共享问题时,引入了redis,其共享内存,以及支持key自动过期的特性,非常契合session的特性,我们在企业开发中最常用的也就是这种模式。但是只要你愿意,也可以选择存储在JDBC,Mongo中,这些,spring都提供了默认的实现,在大多数情况下,我们只需要引入配置即可。而Cookie则是存在于客户端,更方便理解的说法,可以说存在于浏览器。Cookie并不常用,至少在我不长的web开发生涯中,并没有什么场景需要我过多的关注Cookie。http协议允许从服务器返回Response时携带一些Cookie,并且同一个域下对Cookie的数量有所限制

单例模式-控制实例数目,5种写法 :懒汉,恶汉,双重校验锁,枚举和静态内部类

拜拜、爱过 提交于 2020-05-07 15:04:34
单例模式的定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点! 懒汉,线程不安全 public class Singleton { private static Singleton instance; private Singleton (){} public static synchronized Singleton getInstance () { if (instance == null) { instance = new Singleton(); } return instance; } } 这种写法能够在多线程中很好的工作,而且看起来它也具备很好的lazy loading,但是,遗憾的是,效率很低,99%情况下不需要同步。 饿汉 public class Singleton { private static Singleton instance = new Singleton(); private Singleton (){} public static Singleton getInstance () { return instance; } } 这种方式基于classloder机制避免了多线程的同步问题,instance在类装载时就实例化。目前java单例是指一个虚拟机的范围,因为装载类的功能是虚拟机的

SpringBoot定制Sevlet容器原理

心不动则不痛 提交于 2020-05-07 14:40:48
我们定制的Servlet容器或SpringBoot定制的Servlet容器是怎样在SpringBoot应用生效的 首先在 ServletWebServerFactoryAutoConfiguration类里 @Import({ ServletWebServerFactoryAutoConfiguration.BeanPostProcessorsRegistrar. class , // 给容器中导入了BeanPostProcessorsRegistrar组件 @Override public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) { if ( this .beanFactory == null ) { return ; } registerSyntheticBeanIfMissing(registry, "webServerFactoryCustomizerBeanPostProcessor" , WebServerFactoryCustomizerBeanPostProcessor. class ); // 导入了WebServerFactoryCustomizerBeanPostProcessor //