为CAS server添加Change Password和Forget Password功能

CAS统一登录认证(15): 用户自助修改密码,忘记密码处理     我的cas统一登录验证采用ldap存储和验证账号,用户修改密码或密码忘记了怎么办,当然,管理员可以重设用户密码,但为了解放管理员工作量,提高用户体验,需要用户自主维护账号密码。    经过比较,最后采用 php的 self-service-password 软件。 官网地址: https://ltb-project.org/documentation/self-service-pass... 阅读详情

     最近一直在忙CAS相关的项目,team里的兄弟已经配置好了CAS server,并作了一些编程和定制,添加了一个security code在登录页面,以及到ldap server/db验证用户的功能,但发现用初始密码登录后没有强制修改密码的功能,以及忘记密码后,根据密码问题自动重置密码的功能也没有。经过权衡,我觉得还是把Change/Forget password放到CAS中比较合理。于是着手改动CAS的source code。

     CAS我们采用的是3.3.3版的,其中用到了spring mvc2.5以及spring webflow1.0。理解spring mvc/webflow是这次改动的关键。粗粗来说,spring webflow的主要意思是用xml文件控制网页的流向,页面值传递靠一个Bean,比较单纯的get/set值,由FormAction负责进行页面值到这个bean的绑定,提交后的处理方法可以放在FormAction或者其他业务Bean中。

     下面就遇到的问题及解决方法简单叙述一下:

     1. 添加Change Password的功能,等于是在普通验证过程中插入一个分支流程,判断如果是初始化密码的话,就要进入强制修改密码的流程,完成后返回主流程。这就决定了可以利用原有的FormAction以及Bean,添加相应的字段,和方法到Bean和FormAction中。

     这里遇到一个问题,就是VO Bean的传递和使用,由于不熟悉spring webflow,看了很多例子,有的是使用ongl表达式在配置文件中,取出VO bean,然后再作为方法参数传递给业务逻辑。

     这在一般的业务需求中是没有问题的,但CAS的需求比较特殊,原有的流程是被暂停而不是执行结束,分支流程执行完之后,还要继续执行原流程。这就意味着,原有主流程里面用到的上下文参数和方法都需要继续使用,如果跳转到另外一个业务逻辑中的话,原有的上下文都无法取得。

     解决方法,在反复查看了CAS所带例子的AuthenticationFormAction之后,我发现,这个FormAction虽然用到CAS自己定义的centralAuthenticationService,但仍然是一个普通的FormAction,对于public final Event submit(final RequestContext context) throws Exception,也只是一个自己定义的方法,其父类FormAction里面,并不含有此方法。这也就意味着,我也可以自己添加自己的方法,方法的参数就是RequestContext,这一点很重要,这解决了上述问题,从context里面拿到VO bean,(这里是credentials)处理后,继续调用centralAuthenticationService,进行主流程。

 

     2. Forget Password是否和Change Password一样,继续利用原有的FormAction?

     这个问题很简单,这是一个独立的流程,和CAS中的logout等流程一样,有自己的应用名称,这里我用了/password?作为名称。单独写好VO Bean以及FormAction,很快解决问题。(由于惯性,解决第一个问题后,还想继续用原有的FormAction,结果弄来弄去很别扭。)

 

     3. Validator的使用,按照说明,写好一个Validator,然后配置到FormAction,当提交时调用BindAndValidate或者Validate,就会调用验证方法。但如果像问题1,2那样的话,一个流程有多个view,每次输入应该有对应的验证,问题是第一步输入的验证,肯定没有第二步的内容,而如果延迟到最后一步再验证,用户还要倒回到前面的页面重新输入,这也不合理。只有是每一步都验证一下,立刻返回结果才合理,这样多个validate方法怎么配置?

     在Validator中按需要写入多个验证方法,参数和标准的一致,(final Object o, final Errors errors),这里的object其实就是VO bean。每一步调用时,明确其方法名,配置如下:<attribute name="validatorMethod" value="validateMyOwnMethod"/>。这里CAS还有个特殊的地方,按照上述配置,在问题2中运行顺利,但在问题1中一直报错,nullpointexception。经过debug,发现每次要调用自己的validate方法时,validateMethodInvoker总是null。原来FormAction中的initialAction初始化这个变量,而在CAS中,initialAction被重写了,但没有调用其父类FormAction的initialAction,这样才会导致这个问题,补上super.initialAction(),问题解决。

手把手教Apereo CAS5.2.3 Server端 增量开发 自定义登录页,增加验证码,注册,修改密码等功能的方式 很高兴CAS系列帮助到了不少小伙伴,有不少小伙伴加QQ跟我交流 有个比较普遍的问题是大家不知道怎么把注册,修改密码等相关的功能嵌入CAS,这篇博客统一解答下,有些关于spring的内容是我查找资料结合自身理解的,不一定准确,但是方法一定是我验证可以的 顺手贴上CAS 5.2.X官方文档:https://apereo.github.io/cas/5.2.x/index.html hugeo的C... 阅读详情

相关推荐

CAS 服务端登录验证流程(三)

接着上一次结束的地方 WEB-INF/login-webflow.xml<view-state id="viewLoginForm" view="casLoginView" model="credentials"> <binder> <binding property="username" /> <binding property="passwor

pomer_huang的博客 1625

CAS统一登录认证(6): CAS 开启密码管理

CAS 开启密码管理 一、前言 由于系统众多,我们登录系统经常会出现忘记密码的情况,无论是各种移动端应用(例如微信、QQ、facebook等)还是各种pc应用都提供了各种密码找回方式,例如短信找回、邮箱找回、申诉找回…… Cas Server内置提供了使用邮箱修改密码、找回密码的方式,密码找...

oyc的博客 2605

【信息科学与工程学】计算机科学与自动化——第三百零四篇 高性能系统开发指南01

高并发:限流、熔断、降级高性能:红包拆分、多级缓存、大Key/热Key拆分、Pipeline、线程池、RocketMQ零丢失、幂等、分布式锁、集群缩容、分批入库海量数据处理:日志分表分片、跨表查询、冷热分层、大数据引擎服务器选型系统安全:网关安全、服务器安全、云存储安全、风控、监控、测试数据一致性:缓存与数据库一致性、大厂方案、蓝绿回滚、流量一致性、流程一致性项目与团队管理:流程问题、管理问题(风险、成本、人员、文档、培训)稳定性建设:上线三板斧、线上五步闭环、混沌工程、容量规划。

weixin_49199313的博客 248

cas加入验证码以及强制密码到期修改流程

以下为手动改配置文件的配置。 配置文件: 一:cas-servlet.xml,路径:cas/WEB-INF。这个是cas的MVC的配置文件,找到handlerMappingC这个bean,在其&lt;props&gt;&lt;/props&gt;标签中加入两行配置,分别为:   &lt;prop key="/verify.htm"&gt;verifyController&lt;/prop...

dbeautifulLife的博客 2606

Coursera | 离散数学概论(北大)| quiz答案

Coursera离散数学概论quiz答案Week1:数理逻辑:基本概念Week2:数理逻辑:命题逻辑及形式系统Week3:数理逻辑:谓词逻辑及形式系统Week4:集合论:集合代数   先放下Coursera上找的离散数学部分相关课程:   btw.线上学习拿证书还有很多,MOOC、edm等都可。   博主选了北京大学离散数学概论Discrete Mathematics Generality。Mooc上貌似也有,但是上课时间貌似不如Coursera灵活,Coursera时间自己调度,规定时间上完即可。目前课

小鱼干的博客 4126

手把手教你用UNet实现轨道缺陷检测(附RSDDs数据集下载与完整代码)

本文详细介绍了如何使用UNet模型实现轨道缺陷检测,包括RSDDs数据集的下载与处理、UNet架构的改进与优化、训练策略设计以及模型部署的全流程。通过实战案例,展示了如何利用深度学习技术提升工业质检效率,特别适合从事工业缺陷检测和图像处理的开发者参考。

dapp9builder的博客 746

CAS5.3服务端配置,链接mysql、自定义密码加密、登录页面、登录校验,自定义异常、ajax登录等

目录 1、cas服务端配置mysql 2、cas服务端自定义密码加密方式 3、cas服务端自定义主题,也就是登录页面,也可以其他的页面 4、cas服务端在登录时提交的表单中添加字段 5、cas服务端自定义登录校验 6、cas服务端自定义返回异常 7、cas服务端使用ajax进行登录 环境: CAS版本:5.3 下载链接:git地址是:https://github.com/apereo/cas-overlay-template tomcat:8 jdk:1.8 1、先把cas服务端的源代码拷

我是混IT圈的 1万+

SpringBoot+CAS整合服务端和客户端实现SSO单点登录与登出快速入门上手

SpringBoot+CAS整合服务端和客户端实现SSO单点登录与登出快速入门上手

杨杨吖的博客 1万+

Android Profiler 帧率优化实战与性能调优

本文详细介绍了使用Android Profiler进行帧率优化与性能调优的实战方法。通过分析主线程状态、FPS曲线和渲染阶段耗时,精准定位卡顿根源,并提供减少过度绘制、优化绘制命令及改善资源使用的具体策略。文章结合电商、游戏等真实案例,帮助开发者有效解决卡顿问题,提升应用流畅度。

palm99的专栏 536

Clang Static Analyzer 使用教程:本地 + CMake + GitHub Actions 自动静态分析实战

本文介绍了ClangStaticAnalyzer静态代码分析工具的使用方法。该工具基于Clang/LLVM,可检测C/C++代码中的内存泄漏、空指针等常见错误。主要内容包括:安装指南(Ubuntu/macOS/Windows)、命令行使用方法、CMake项目集成方案、GitHub Actions自动化分析配置,以及HTML报告生成与查看。文章还提供了官方资源链接,帮助开发者系统掌握从本地调试到持续集成的完整静态分析工作流,提升代码质量保障能力。适用于需要在开发过程中实施静态分析的C/C++项目。

u014358031的博客 2156

CAS6.1 配置连接数据库,以及修改自定义的密码验证(SpringSecurity)

一、cas 配置数据库 1、在build.gradle中引入jar dependencies { // Other CAS dependencies/modules may be listed here... // compile "org.apereo.cas:cas-server-support-json-service-registry:${casServerVersion}" compile "org.apereo.cas:cas-server-webapp-.

xcc_2269861428的博客 1729

国科大人工智能原理与算法-2024-第一次作业-雷震老师

1. 反射行动(比如从热炉子上缩回你的手)是理性的吗?它们是智能的吗? 2. 以下的计算机系统在何种程度上是人工智能的实例: - 超市条码扫描器 - 网络搜索引擎 - 语音激活的电话菜单 - 对网络状态动态响应的网络路由算法 3. 为什么进化会倾向于导致行为合理的系统?设计这样的系统想达到的目标是什么?

MatsumotoChrikk 2926

3、cas_http_https_用户名或者邮箱修改密码

前言,准备cas自定义通过邮箱修改密码,这里的验证,点击邮箱链接之后还会输入密保问题。本文章有http和https两种验证邮箱。不必着急往后看。证书无非是SSL设置为true或者false;1、在sso-server的resource下放入创建好的证书2、cas这里的邮箱验证,数据表创建这里的cas邮箱验证,是通过给用户发邮件,然后用户跳转到服务端,通过密保问题进行修改的。所以需要创建密保问题。这里

HealerJean梦想博客 1461

语言模型推理能力与计算表达力深度解析

语言模型的推理能力本质上是一种知识迁移与泛化应用的过程,其核心在于Transformer架构中的自注意力机制和前馈网络的协同作用。计算表达力作为衡量模型能力的关键指标,涉及函数逼近、组合泛化和上下文理解等多个维度。随着模型规模的扩大,涌现能力现象揭示了参数规模与推理能力之间的非线性关系。在实际应用中,通过提示工程和微调策略可以有效激活和优化模型的推理表现。当前研究正探索模块化架构和世界模型整合等方向,以突破长程推理和因果关系建模等前沿挑战。本文深入探讨了语言模型推理泛化的技术原理与实践方法,为理解计算表达力

weixin_42521032的博客 341

52-Halcon-- smooth_object_model_3d函数功能(滑处理3D对象模型)

Halcon中smooth_object_model_3d算子详解 该算子用于3D模型平滑处理,提供三种算法:'laplacian'(快速去噪)、'taubin'(高质量防收缩)和'low_pass'(频域滤波)。核心参数包括迭代次数(默认5)、平滑强度(0-1)和边缘保护选项。典型应用包括扫描数据去噪、CAD模型光顺和逆向工程优化。支持自适应平滑、结合模型简化等高级技巧,并可通过分块处理优化大型模型性能。参数组合需根据具体场景选择,如快速去噪推荐拉普拉斯方法(5次迭代,强度0.3),特征保持推荐低通滤波(

weixin_45590420的博客 871

轻松搭建CAS 5.x系列(5)-增加密码找回和密码修改功能

概述说明 CAS内置了密码找回和密码修改的功能; 密码找回功能是,系统会吧密码重置的连接通过邮件或短信方式发送给用户,用户点击链接后就可以重置密码,cas还支持预留密码重置的问题,只有回答对了,才可以重置密码;系统可配置密码重置后,是否自动登录; 密码修改功能是,用户登录后输入新密码即可完成密码修改。 当然如果内置的密码管理的功能无法满足项目的需求,也可以自行开发后整合到CAS; 安装步...

好用的CAS 3740

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Cas用户密码自定义加密

&lt;bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"&gt;      &lt;property name="dataSource" ref="dataSourceForMySql" &gt;&lt;/property&gt;      &lt;property name="sq

xudasong123的博客 2230

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

修改cas-server(三),自定义登录验证方式。

在修改cas-server(二)中,虽然修改了jdbc,但是还是只能判断用户名/密码。 如果需要多增加一个参数,如systemid,则需要修改cas-server-core.jar的源码。 参考:http://blog.youkuaiyun.com/lovesummerforever/article/details/38023385 1.修改login-webflow.xml

czlpf的博客 1854

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

CAS单点登录(第5版)

欢迎学习最新版课程:CAS单点登录(第7版)https://edu.youkuaiyun.com/course/detail/40241欢迎学习最新版课程:CAS单点登录(第7版)https://edu.youkuaiyun.com/course/detail/40241 

cas 配置数据源 , 解决CAS 不支持你提供的凭证

(HTTP方式) 安装环境 Tomcat7.0JDK6CAS SERVER 3.5.2,下载地址  http://www.jasig.org/cas/download 1.打开cas\WEB-INF\deployerConfigContext.xml文件 (1) 注销系统默认登录方式: <bean class="org.jasig.cas.authentication.

岑国程 1万+

CAS 自定义登录的代码改写和部分主要逻辑解析

原文发在本人博客上https://liushaohuang.cn/2020/01/20/CAS-%E8%87%AA%E5%AE%9A%E4%B9%89%E7%99%BB%E5%BD%95/#more 简介 CAS提供了单点登录服务功能,但是默认只使用账号密码登录,在现实项目中往往需要添加各种验证因子比如短信和验证码等,通过对源码的跟踪和分析这边简介一下CAS登录验证逻辑的大致流程和如何定制登录代码...

weixin_37548740的博客 4317

CAS单点登录源码解析之【服务器端】

前期准备: 1.cas-server-3.5.2-release.zip 2.应用系统webapp1(http://127.0.0.1:8090/webapp1/main.do) 3.应用系统webapp2(http://127.0.0.1:8091/webapp2/main.do) 4.CAS单点登录服务器端(http://127.0.0.1:8081/cas-server/) ...

makeryan的专栏 1630

CAS自定义登录默认页面和返回更多的参数以及自定义密码校验

前言:接8中代码,使用jdbc md5登录或者使用加密与盐登录。但是下面会介绍自定义验证密码登录,只不过代码不一样。本内容将不会提供代码,因为涉及到隐私信息,如果需要代码,请直接联系博主1、自定义主题1、自定义主题的theme默认名字为:apereo2、service中添加json文件,确定要拦截的url地址,启动主题登录,这里不仅对有证书https的拦截,也对没有证书的http拦截{ "@cl

HealerJean梦想博客 8487

CAS单点登录-密码管理(十三)

CAS单点登录-密码管理(十三) 看到这里我们目前已经把cas版本升级到5.1.5 先说一下我们日常的一些重置密码做法: 输入用户名/邮箱/手机号(其实就是确定到一个用户) 发送邮件/验证码进行验证 邮箱验证(打开链接)/手机验证(输入验证码) 加强验证回答问题(可无) 输入新密码,重置 但像qq那样,找回密码功能无非是多了一个审核功能,其实一般来说,邮箱/短信验证加上回答问题已经满足日常的需求了

悟空、的博客园 1万+
上一篇: Cache学习笔记
下一篇: CAS server source code 粗解
eddyx
博客等级 码龄22年 14粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值