Spring Security 入门(三):Remember-Me 和注销登录
本文在前文 Spring Security 入门(二):图形验证码和手机短信验证码 的基础上介绍 Remember-Me 功能和注销登录。
Remember-Me 功能
在实际开发中,为了用户登录方便常常会启用记住我(Remember-Me)功能。如果用户登录时勾选了“记住我”选项,那么在一段有效时间内,会默认自动登录,免去再次输入用户名、密码等登录操作。该功能的实现机理是根据用户登录信息生成 Token 并保存在用户浏览器的 Cookie 中,当用户需要再次登录时,自动实现校验并建立登录态的一种机制。
Spring Security提供了两种 Remember-Me 的实现方式:
简单加密 Token:用散列算法加密用户必要的登录系信息并生成 Token 令牌。
持久化 Token:数据库等持久性数据存储机制用的持久化 Token 令牌。
基本原理
Remember-Me 功能的开启需要在configure(HttpSecurity http)方法中通过http.rememberMe()配置,该配置主要会在过滤器链中添加 RememberMeAuthenticationFilt ...
Spring Security 入门(二):图形验证码和手机短信验证码
本文在前文 Spring Security 入门(一):认证和原理分析 的基础上介绍图形验证码和手机短信验证码登录的实现。
图形验证码
在用户登录时,一般通过表单的方式进行登录都会要求用户输入验证码,Spring Security默认没有实现图形验证码的功能,所以需要我们自己实现。
实现流程分析
前文中实现的用户名、密码登录是在UsernamePasswordAuthenticationFilter过滤器进行认证的,而图形验证码一般是在用户名、密码认证之前进行验证的,所以需要在UsernamePasswordAuthenticationFilter过滤器之前添加一个自定义过滤器 ImageCodeValidateFilter,用来校验用户输入的图形验证码是否正确。自定义过滤器继承 OncePerRequestFilter 类,该类是 Spring 提供的在一次请求中只会调用一次的 filter。
自定义的过滤器 ImageCodeValidateFilter 首先会判断请求是否为 POST 方式的登录表单提交请求,如果是就将其拦截进行图形验证码校验。如果验证错误,会抛出自 ...
Spring Security 入门(一):认证和原理分析
Spring Security是一种基于Spring AOP和Servlet Filter的安全框架,其核心是一组过滤器链,实现 Web 请求和方法调用级别的用户鉴权和权限控制。本文将会介绍该安全框架的身份认证和退出登录的基本用法,并对其相关源码进行分析。
表单认证
Spring Security提供了两种认证方式:HttpBasic 认证和 HttpForm 表单认证。HttpBasic 认证不需要我们编写登录页面,当浏览器请求 URL 需要认证才能访问时,页面会自动弹出一个登录窗口,要求用户输入用户名和密码进行认证。大多数情况下,我们还是通过编写登录页面进行 HttpForm 表单认证。
快速入门
☕️ 工程的整体目录
☕️ 在 pom.xml 添加依赖
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061<parent> <groupId>org.springfram ...
运行Mapreduce作业出现Java heap space解决方案
在一次吃饭间隙听到身边的朋友说到:“为什么我的mapreduce作业总是运行到某个阶段就报出如下错误,然后失败呢?以前同一个作业没出现过的呀?”
1234519/01/10 12:48:01 INFO mapred.JobClient: Task Id : attempt_201001061331_0002_m_000027_0, Status : FAILEDjava.lang.OutOfMemoryError: Java heap space at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.<init>(MapTask.java:498) at org.apache.hadoop.mapred.MapTask.run(MapTask.java:305) at org.apache.hadoop.mapred.Child.main(Child.java:158)
报错日志已经给出了,就是 Out Of Memory OOM的问题。
其实这样的错误有时候并不是程序逻辑的问题(当 ...
记一次MR报错:Container is running beyond physical memory limits...
背景较早之前项目组一次新需求上线时,需要初始化Hive中某张表的全量历史数据。该表由于历史原因导致ETL处理的时候,2015年前的数据产出文件(定长压缩文件)时为同一个ETL日期,也就是这张表的分区日期,由于涵盖多年的数据,并且数据文件较大又分为多个日期,数据存放Hive时需要按照其真实业务日期进行重分区。线上集群同时有部分Spark任务存在,所以决定采用Mapreduce方式进行解析入库并重分区到正式表(其中集群为CDH5.14.0)。
错误日志我们日常开发测试与生产环境物理隔离,日志无法获取,以下日志来源于CSDN)
123456789101112131415161718192021222324252627282930313233......18/05/15 09:36:59 INFO mapreduce.Job: Running job: job_1525923400969_002318/05/15 09:37:11 INFO mapreduce.Job: Job job_1525923400969_0023 running in uber mode : false18/05/1 ...
CDH集群磁盘故障换盘处理
前言前段时间公司线上CDH集群突然异常报警,经过查验后发现是其中一个数据节点所在的服务器上某块磁盘无法读写,导致当前DataNode节点读写异常。随后登录到故障节点进行手动验证,进入到损坏磁盘的挂载目录,预创建文件进行读写操作,发现直接报错,查看报错信息,确实是当前磁盘无法读写异常。
问题已经足以说明是磁盘损坏了,那接下来就是换盘操作了,由于机房不在本地(公司),所以同时联系运维同时进驻机房,进行手动换盘,然后在服务器上再进行设置。
由于我本人不是做运维方面的,关于服务器一些常用的命令使用起来基本没什么问题,但是像磁盘挂载这方面的操作还是比较生疏的,虽然之前有了解过一些,也在自己本机进行过配置,但毕竟不是生产环境,差别还是有的。并且公司有专门的运维同事负责我们项目组线上的集群(但是只负责服务器相关的运维操作,CDH集群包括项目组线上所有运行的服务还得我们自己排查自己搞,有时候都怀疑自己除了是大数据开发,还附带兼职运维图片)。
玩笑归玩笑,工作上的事情该做还是要好好做,不能给后人“唾骂”的机会。那么本文主要讲述磁盘故障需要在线换盘时,CDH集群需要做的操作有哪些。
为DataNode执行 ...
CentOS 7(Linux系统) 安装sqlserver
练习环境:centos7,内存2G以上
安装步骤1.1:设置sqlserver安装镜像:(不同的linux版本要找对应的sqlserver数据库版本,不然会有问题)
1curl https://packages.microsoft.com/config/rhel/7/mssql-server-2017.repo > /etc/yum.repos.d/mssql-server.repo
1.2:镜像下载完成后,执行安装
1yum install -y mssql-server
1.2.1:如果你环境比较干净,可能还要手动安装一下yum(看自己版本,-7 -8要对应,不然用不了)
1wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
1.3:安装完后,会提示让你执行代码,配置一下数据库
1sudo /opt/mssql/bin/mssql-conf setup
1.4:配置完后会自动运行数据库服务,也可以手动查看
1.4.1:如果安装失败的话,提示你…Error: ...
SQL Server 基础命令及报错汇总
数据库基本使用命令1234567891011121314151617181920212223242526272829303132333435363738394041-- 创建数据库,指定编码格式CREATE DATABASE suggest_cm COLLATE Chinese_PRC_CI_AS;use suggest_cm;-- 创建数据库登录用户CREATE LOGIN suggest_cm WITH PASSWORD = 'SuggestXXX';CREATE USER suggest_cm FOR LOGIN suggest_cm;-- 数据库所有权,【切换到对应数据库执行】,否则当前用户无法访问数据库ALTER ROLE db_owner ADD MEMBER suggest_cm;------------------------------------------------------------### 修改字符集报错--1. 先改为单用户模式ALTER DATABASE suggest_cm SET SINGLE_USER WITH ROLLBAC ...
ELK系列(六)、CDH6集成Elasticsearch服务(交由CM管理)
前言本文穿插讲述如何将Elasticsearch服务集成至CHD,最终将服务交给Cloudera Manager统一管理。
本司线上使用CDH5,暂未升级至CH6,此处以CDH6版本进行集成制作,方式差异不大。
制作 Elasticsearch 的 Parcel 包和 csd 文件配置Java、Maven环境此处默认已配置完成,不再讲述,其中Maven版本建议选用较高版本。
环境验证控制台输入 mvn -v,java -version 验证maven及java是否配置正确,正常情况下将打印对应版本信息。
下载cm_extCloudera提供的cm_ext工具,生成的csd和parcel进行校验
123456789mkdir -p /github/clouderacd /github/cloudera# 如果没有git环境,可下载至本机,再上传至当前目录下git clone https://github.com/cloudera/cm_ext.gitcd cm_ext# mvn 打包mvn package -Dmaven.test.skip=true
编译成功后如下图:
说明:build ...
ELK系列(五)、ElasticSearch常用命令
前言上篇文章末尾ES集群开启x-pack权限认证后,采用Restful的方式进行了集群简单的验增删改查操作。现在基于Kibana已安装完成的基础上,采用Dev-tools工具进行实战,开发环节中也建议采用这种方式,原因有下:
1)kibana 自带的 dev-tools 工具具有良好的提示功能2)dev-tools 工具中开发方便快捷,具有较高的效率3)最终要的一点是不容易出错
那么,此处呢就主要以 Kibana Dev-tools 工具为主,采用DSL语言进行讲述ElasticSearch中常用的的一些命令。
常用命令汇总索引维护查看所有索引1GET /_cat/indices
创建索引(并且指定分片数量)1234567891011PUT test{ "settings": { "number_of_shards": 2, "number_of_replicas": 2 }}# 或者直接创建PUT test
查看某个索引信息1GET test
添加数据(自定义ID) ...