当前位置: 首页 > news >正文

portfolio wordpress南宁网站seo排名优化

portfolio wordpress,南宁网站seo排名优化,网站要实名认证,做企业网站需要什么用户登录模块技术要点#xff1a; 密码通过MD5加密传输分布式session存储用户登录信息自定义注解进行字段校验自定义拦截器完成登录验证 下面依次给出代码和详细解释#xff1a; 1.使用 MD5 二次加密用户登录信息#xff0c;前端先通过密码加上盐进行MD5加密交给服务器 密码通过MD5加密传输分布式session存储用户登录信息自定义注解进行字段校验自定义拦截器完成登录验证 下面依次给出代码和详细解释 1.使用 MD5 二次加密用户登录信息前端先通过密码加上盐进行MD5加密交给服务器在userSeverice验证时再对此密码加盐进行一次MD5加密才和数据库中查询的密码对比 登录页面前端代码 !DOCTYPE html html langenxmlns:thhttp://www.thymeleaf.org headmeta charsetUTF-8title登录/title!-- jquery --script typetext/javascript th:src{/js/jquery.min.js}/script!-- bootstrap --link relstylesheet typetext/css th:href{/bootstrap/css/bootstrap.min.css}/script typetext/javascript th:src{/bootstrap/js/bootstrap.min.js}/script!-- jquery-validator --script typetext/javascript th:src{/jquery-validation/jquery.validate.min.js}/scriptscript typetext/javascript th:src{/jquery-validation/localization/messages_zh.min.js}/script!-- layer --script typetext/javascript th:src{/layer/layer.js}/script!-- md5.js --script typetext/javascript th:src{/js/md5.min.js}/script!-- common.js --script typetext/javascript th:src{/js/common.js}/script /head body form nameloginForm idloginForm methodpost stylewidth:50%; margin:0 autoh2 styletext-align:center; margin-bottom: 20px用户登录/h2div classform-groupdiv classrowlabel classform-label col-md-4请输入手机号码/labeldiv classcol-md-5input idmobile namemobile classform-control typetext placeholder手机号码 requiredtrue/!-- 取消位数限制 minlength11 maxlength11--/divdiv classcol-md-1/div/div/divdiv classform-groupdiv classrowlabel classform-label col-md-4请输入密码/labeldiv classcol-md-5input idpassword namepassword classform-control typepassword placeholder密码requiredtrue/!-- 取消位数限制 minlength6 maxlength16--/div/div/divdiv classrowdiv classcol-md-5button classbtn btn-primary btn-block typereset onclickreset()重置/button/divdiv classcol-md-5button classbtn btn-primary btn-block typesubmit onclicklogin()登录/button/div/div /form /body scriptfunction login() {$(#loginForm).validate({submitHandler: function (form) {doLogin();}});}function doLogin() {g_showLoading();var inputPass $(#password).val();var salt g_passsword_salt;var str salt.charAt(0) salt.charAt(2) inputPass salt.charAt(5) salt.charAt(4);var password md5(str);$.ajax({url: /login/doLogin,type: POST,data: {mobile: $(#mobile).val(),password: password},success: function (data) {layer.closeAll();if (data.code 200) {layer.msg(成功);console.log(data);document.cookie userTicket data.object;window.location.href /goods/toList;} else {layer.msg(data.message);}},error: function () {layer.closeAll();}});} /script /htmlvalidate的JS代码 !function(a){functiontypeof definedefine.amd?define([jquery],a):a(jQuery)}(function(a){a.extend(a.fn,{validate:function(b){if(!this.length)return void(bb.debugwindow.consoleconsole.warn(Nothing selected, cant validate, returning nothing.));var ca.data(this[0],validator);return c?c:(this.attr(novalidate,novalidate),cnew a.validator(b,this[0]),a.data(this[0],validator,c),c.settings.onsubmit(this.on(click.validate,:submit,function(b){c.settings.submitHandler(c.submitButtonb.target),a(this).hasClass(cancel)(c.cancelSubmit!0),void 0!a(this).attr(formnovalidate)(c.cancelSubmit!0)}),this.on(submit.validate,function(b){function d(){var d,e;return c.settings.submitHandler?(c.submitButton(da(input typehidden/).attr(name,c.submitButton.name).val(a(c.submitButton).val()).appendTo(c.currentForm)),ec.settings.submitHandler.call(c,c.currentForm,b),c.submitButtond.remove(),void 0!e?e:!1):!0}return c.settings.debugb.preventDefault(),c.cancelSubmit?(c.cancelSubmit!1,d()):c.form()?c.pendingRequest?(c.formSubmitted!0,!1):d():(c.focusInvalid(),!1)})),c)},valid:function(){var b,c,d;return a(this[0]).is(form)?bthis.validate().form():(d[],b!0,ca(this[0].form).validate(),this.each(function(){bc.element(this)b,dd.concat(c.errorList)}),c.errorListd),b},rules:function(b,c){var d,e,f,g,h,i,jthis[0];if(b)switch(da.data(j.form,validator).settings,ed.rules,fa.validator.staticRules(j),b){caseadd:a.extend(f,a.validator.normalizeRule(c)),delete f.messages,e[j.name]f,c.messages(d.messages[j.name]a.extend(d.messages[j.name],c.messages));break;caseremove:return c?(i{},a.each(c.split(/\s/),function(b,c){i[c]f[c],delete f[c],requiredca(j).removeAttr(aria-required)}),i):(delete e[j.name],f)}return ga.validator.normalizeRules(a.extend({},a.validator.classRules(j),a.validator.attributeRules(j),a.validator.dataRules(j),a.validator.staticRules(j)),j),g.required(hg.required,delete g.required,ga.extend({required:h},g),a(j).attr(aria-required,true)),g.remote(hg.remote,delete g.remote,ga.extend(g,{remote:h})),g}}),a.extend(a.expr[:],{blank:function(b){return!a.trim(a(b).val())},filled:function(b){return!!a.trim(a(b).val())},unchecked:function(b){return!a(b).prop(checked)}}),a.validatorfunction(b,c){this.settingsa.extend(!0,{},a.validator.defaults,b),this.currentFormc,this.init()},a.validator.formatfunction(b,c){return 1arguments.length?function(){var ca.makeArray(arguments);return c.unshift(b),a.validator.format.apply(this,c)}:(arguments.length2c.constructor!Array(ca.makeArray(arguments).slice(1)),c.constructor!Array(c[c]),a.each(c,function(a,c){bb.replace(new RegExp(\\{a\\},g),function(){return c})}),b)},a.extend(a.validator,{defaults:{messages:{},groups:{},rules:{},errorClass:error,validClass:valid,errorElement:label,focusCleanup:!1,focusInvalid:!0,errorContainer:a([]),errorLabelContainer:a([]),onsubmit:!0,ignore::hidden,ignoreTitle:!1,onfocusin:function(a){this.lastActivea,this.settings.focusCleanup(this.settings.unhighlightthis.settings.unhighlight.call(this,a,this.settings.errorClass,this.settings.validClass),this.hideThese(this.errorsFor(a)))},onfocusout:function(a){this.checkable(a)||!(a.name in this.submitted)this.optional(a)||this.element(a)},onkeyup:function(b,c){var d[16,17,18,20,35,36,37,38,39,40,45,144,225];9c.whichthis.elementValue(b)||-1!a.inArray(c.keyCode,d)||(b.name in this.submitted||bthis.lastElement)this.element(b)},onclick:function(a){a.name in this.submitted?this.element(a):a.parentNode.name in this.submittedthis.element(a.parentNode)},highlight:function(b,c,d){radiob.type?this.findByName(b.name).addClass(c).removeClass(d):a(b).addClass(c).removeClass(d)},unhighlight:function(b,c,d){radiob.type?this.findByName(b.name).removeClass(c).addClass(d):a(b).removeClass(c).addClass(d)}},setDefaults:function(b){a.extend(a.validator.defaults,b)},messages:{required:This field is required.,remote:Please fix this field.,email:Please enter a valid email address.,url:Please enter a valid URL.,date:Please enter a valid date.,dateISO:Please enter a valid date ( ISO ).,number:Please enter a valid number.,digits:Please enter only digits.,creditcard:Please enter a valid credit card number.,equalTo:Please enter the same value again.,maxlength:a.validator.format(Please enter no more than {0} characters.),minlength:a.validator.format(Please enter at least {0} characters.),rangelength:a.validator.format(Please enter a value between {0} and {1} characters long.),range:a.validator.format(Please enter a value between {0} and {1}.),max:a.validator.format(Please enter a value less than or equal to {0}.),min:a.validator.format(Please enter a value greater than or equal to {0}.)},autoCreateRanges:!1,prototype:{init:function(){function b(b){var ca.data(this.form,validator),donb.type.replace(/^validate/,),ec.settings;e[d]!a(this).is(e.ignore)e[d].call(c,this,b)}this.labelContainera(this.settings.errorLabelContainer),this.errorContextthis.labelContainer.lengththis.labelContainer||a(this.currentForm),this.containersa(this.settings.errorContainer).add(this.settings.errorLabelContainer),this.submitted{},this.valueCache{},this.pendingRequest0,this.pending{},this.invalid{},this.reset();var c,dthis.groups{};a.each(this.settings.groups,function(b,c){stringtypeof c(cc.split(/\s/)),a.each(c,function(a,c){d[c]b})}),cthis.settings.rules,a.each(c,function(b,d){c[b]a.validator.normalizeRule(d)}),a(this.currentForm).on(focusin.validate focusout.validate keyup.validate,:text, [typepassword], [typefile], select, textarea, [typenumber], [typesearch], [typetel], [typeurl], [typeemail], [typedatetime], [typedate], [typemonth], [typeweek], [typetime], [typedatetime-local], [typerange], [typecolor], [typeradio], [typecheckbox],b).on(click.validate,select, option, [typeradio], [typecheckbox],b),this.settings.invalidHandlera(this.currentForm).on(invalid-form.validate,this.settings.invalidHandler),a(this.currentForm).find([required], [data-rule-required], .required).attr(aria-required,true)},form:function(){return this.checkForm(),a.extend(this.submitted,this.errorMap),this.invalida.extend({},this.errorMap),this.valid()||a(this.currentForm).triggerHandler(invalid-form,[this]),this.showErrors(),this.valid()},checkForm:function(){this.prepareForm();for(var a0,bthis.currentElementsthis.elements();b[a];a)this.check(b[a]);return this.valid()},element:function(b){var cthis.clean(b),dthis.validationTargetFor(c),e!0;return this.lastElementd,void 0d?delete this.invalid[c.name]:(this.prepareElement(d),this.currentElementsa(d),ethis.check(d)!!1,e?delete this.invalid[d.name]:this.invalid[d.name]!0),a(b).attr(aria-invalid,!e),this.numberOfInvalids()||(this.toHidethis.toHide.add(this.containers)),this.showErrors(),e},showErrors:function(b){if(b){a.extend(this.errorMap,b),this.errorList[];for(var c in b)this.errorList.push({message:b[c],element:this.findByName(c)[0]});this.successLista.grep(this.successList,function(a){return!(a.name in b)})}this.settings.showErrors?this.settings.showErrors.call(this,this.errorMap,this.errorList):this.defaultShowErrors()},resetForm:function(){a.fn.resetForma(this.currentForm).resetForm(),this.submitted{},this.lastElementnull,this.prepareForm(),this.hideErrors();var b,cthis.elements().removeData(previousValue).removeAttr(aria-invalid);if(this.settings.unhighlight)for(b0;c[b];b)this.settings.unhighlight.call(this,c[b],this.settings.errorClass,);else c.removeClass(this.settings.errorClass)},numberOfInvalids:function(){return this.objectLength(this.invalid)},objectLength:function(a){var b,c0;for(b in a)c;return c},hideErrors:function(){this.hideThese(this.toHide)},hideThese:function(a){a.not(this.containers).text(),this.addWrapper(a).hide()},valid:function(){return 0this.size()},size:function(){return this.errorList.length},focusInvalid:function(){if(this.settings.focusInvalid)try{a(this.findLastActive()||this.errorList.lengththis.errorList[0].element||[]).filter(:visible).focus().trigger(focusin)}catch(b){}},findLastActive:function(){var bthis.lastActive;return b1a.grep(this.errorList,function(a){return a.element.nameb.name}).lengthb},elements:function(){var bthis,c{};return a(this.currentForm).find(input, select, textarea).not(:submit, :reset, :image, :disabled).not(this.settings.ignore).filter(function(){return!this.nameb.settings.debugwindow.consoleconsole.error(%o has no name assigned,this),this.name in c||!b.objectLength(a(this).rules())?!1:(c[this.name]!0,!0)})},clean:function(b){return a(b)[0]},errors:function(){var bthis.settings.errorClass.split( ).join(.);return a(this.settings.errorElement.b,this.errorContext)},reset:function(){this.successList[],this.errorList[],this.errorMap{},this.toShowa([]),this.toHidea([]),this.currentElementsa([])},prepareForm:function(){this.reset(),this.toHidethis.errors().add(this.containers)},prepareElement:function(a){this.reset(),this.toHidethis.errorsFor(a)},elementValue:function(b){var c,da(b),eb.type;returnradioe||checkboxe?this.findByName(b.name).filter(:checked).val():numbereundefined!typeof b.validity?b.validity.badInput?!1:d.val():(cd.val(),stringtypeof c?c.replace(/\r/g,):c)},check:function(b){bthis.validationTargetFor(this.clean(b));var c,d,e,fa(b).rules(),ga.map(f,function(a,b){return b}).length,h!1,ithis.elementValue(b);for(d in f){e{method:d,parameters:f[d]};try{if(ca.validator.methods[d].call(this,i,b,e.parameters),dependency-mismatchc1g){h!0;continue}if(h!1,pendingc)return void(this.toHidethis.toHide.not(this.errorsFor(b)));if(!c)return this.formatAndAdd(b,e),!1}catch(j){throw this.settings.debugwindow.consoleconsole.log(Exception occurred when checking element b.id, check the e.method method.,j),j instanceof TypeError(j.message. Exception occurred when checking element b.id, check the e.method method.),j}}if(!h)return this.objectLength(f)this.successList.push(b),!0},customDataMessage:function(b,c){return a(b).data(msgc.charAt(0).toUpperCase()c.substring(1).toLowerCase())||a(b).data(msg)},customMessage:function(a,b){var cthis.settings.messages[a];return c(c.constructorString?c:c[b])},findDefined:function(){for(var a0;aarguments.length;a)if(void 0!arguments[a])return arguments[a];return void 0},defaultMessage:function(b,c){return this.findDefined(this.customMessage(b.name,c),this.customDataMessage(b,c),!this.settings.ignoreTitleb.title||void 0,a.validator.messages[c],strongWarning: No message defined for b.name/strong)},formatAndAdd:function(b,c){var dthis.defaultMessage(b,c.method),e/\$?\{(\d)\}/g;functiontypeof d?dd.call(this,c.parameters,b):e.test(d)(da.validator.format(d.replace(e,{$1}),c.parameters)),this.errorList.push({message:d,element:b,method:c.method}),this.errorMap[b.name]d,this.submitted[b.name]d},addWrapper:function(a){return this.settings.wrapper(aa.add(a.parent(this.settings.wrapper))),a},defaultShowErrors:function(){var a,b,c;for(a0;this.errorList[a];a)cthis.errorList[a],this.settings.highlightthis.settings.highlight.call(this,c.element,this.settings.errorClass,this.settings.validClass),this.showLabel(c.element,c.message);if(this.errorList.length(this.toShowthis.toShow.add(this.containers)),this.settings.success)for(a0;this.successList[a];a)this.showLabel(this.successList[a]);if(this.settings.unhighlight)for(a0,bthis.validElements();b[a];a)this.settings.unhighlight.call(this,b[a],this.settings.errorClass,this.settings.validClass);this.toHidethis.toHide.not(this.toShow),this.hideErrors(),this.addWrapper(this.toShow).show()},validElements:function(){return this.currentElements.not(this.invalidElements())},invalidElements:function(){return a(this.errorList).map(function(){return this.element})},showLabel:function(b,c){var d,e,f,gthis.errorsFor(b),hthis.idOrName(b),ia(b).attr(aria-describedby);g.length?(g.removeClass(this.settings.validClass).addClass(this.settings.errorClass),g.html(c)):(ga(this.settings.errorElement).attr(id,h-error).addClass(this.settings.errorClass).html(c||),dg,this.settings.wrapper(dg.hide().show().wrap(this.settings.wrapper/).parent()),this.labelContainer.length?this.labelContainer.append(d):this.settings.errorPlacement?this.settings.errorPlacement(d,a(b)):d.insertAfter(b),g.is(label)?g.attr(for,h):0g.parents(label[forh]).length(fg.attr(id).replace(/(:|\.|\[|\]|\$)/g,\\$1),i?i.match(new RegExp(\\bf\\b))||(i f):if,a(b).attr(aria-describedby,i),ethis.groups[b.name],ea.each(this.groups,function(b,c){cea([nameb],this.currentForm).attr(aria-describedby,g.attr(id))}))),!cthis.settings.success(g.text(),stringtypeof this.settings.success?g.addClass(this.settings.success):this.settings.success(g,b)),this.toShowthis.toShow.add(g)},errorsFor:function(b){var cthis.idOrName(b),da(b).attr(aria-describedby),elabel[forc], label[forc] *;return d(ee, #d.replace(/\s/g,, #)),this.errors().filter(e)},idOrName:function(a){return this.groups[a.name]||(this.checkable(a)?a.name:a.id||a.name)},validationTargetFor:function(b){return this.checkable(b)(bthis.findByName(b.name)),a(b).not(this.settings.ignore)[0]},checkable:function(a){return/radio|checkbox/i.test(a.type)},findByName:function(b){return a(this.currentForm).find([nameb])},getLength:function(b,c){switch(c.nodeName.toLowerCase()){caseselect:return a(option:selected,c).length;caseinput:if(this.checkable(c))return this.findByName(c.name).filter(:checked).length}return b.length},depend:function(a,b){return this.dependTypes[typeof a]?this.dependTypes[typeof a](a,b):!0},dependTypes:{boolean:function(a){return a},string:function(b,c){return!!a(b,c.form).length},function:function(a,b){return a(b)}},optional:function(b){var cthis.elementValue(b);return!a.validator.methods.required.call(this,c,b)dependency-mismatch},startRequest:function(a){this.pending[a.name]||(this.pendingRequest,this.pending[a.name]!0)},stopRequest:function(b,c){this.pendingRequest--,this.pendingRequest0(this.pendingRequest0),delete this.pending[b.name],c0this.pendingRequestthis.formSubmittedthis.form()?(a(this.currentForm).submit(),this.formSubmitted!1):!c0this.pendingRequestthis.formSubmitted(a(this.currentForm).triggerHandler(invalid-form,[this]),this.formSubmitted!1)},previousValue:function(b){return a.data(b,previousValue)||a.data(b,previousValue,{old:null,valid:!0,message:this.defaultMessage(b,remote)})},destroy:function(){this.resetForm(),a(this.currentForm).off(.validate).removeData(validator)}},classRuleSettings:{required:{required:!0},email:{email:!0},url:{url:!0},date:{date:!0},dateISO:{dateISO:!0},number:{number:!0},digits:{digits:!0},creditcard:{creditcard:!0}},addClassRules:function(b,c){b.constructorString?this.classRuleSettings[b]c:a.extend(this.classRuleSettings,b)},classRules:function(b){var c{},da(b).attr(class);return da.each(d.split( ),function(){this in a.validator.classRuleSettingsa.extend(c,a.validator.classRuleSettings[this])}),c},normalizeAttributeRule:function(a,b,c,d){/min|max/.test(c)(nullb||/number|range|text/.test(b))(dNumber(d),isNaN(d)(dvoid 0)),d||0d?a[c]d:bcrange!b(a[c]!0)},attributeRules:function(b){var c,d,e{},fa(b),gb.getAttribute(type);for(c in a.validator.methods)requiredc?(db.getAttribute(c),d(d!0),d!!d):df.attr(c),this.normalizeAttributeRule(e,g,c,d);return e.maxlength/-1|2147483647|524288/.test(e.maxlength)delete e.maxlength,e},dataRules:function(b){var c,d,e{},fa(b),gb.getAttribute(type);for(c in a.validator.methods)df.data(rulec.charAt(0).toUpperCase()c.substring(1).toLowerCase()),this.normalizeAttributeRule(e,g,c,d);return e},staticRules:function(b){var c{},da.data(b.form,validator);return d.settings.rules(ca.validator.normalizeRule(d.settings.rules[b.name])||{}),c},normalizeRules:function(b,c){return a.each(b,function(d,e){if(e!1)return void delete b[d];if(e.param||e.depends){var f!0;switch(typeof e.depends){casestring:f!!a(e.depends,c.form).length;break;casefunction:fe.depends.call(c,c)}f?b[d]void 0!e.param?e.param:!0:delete b[d]}}),a.each(b,function(d,e){b[d]a.isFunction(e)?e(c):e}),a.each([minlength,maxlength],function(){b[this](b[this]Number(b[this]))}),a.each([rangelength,range],function(){var c;b[this](a.isArray(b[this])?b[this][Number(b[this][0]),Number(b[this][1])]:stringtypeof b[this](cb[this].replace(/[\[\]]/g,).split(/[\s,]/),b[this][Number(c[0]),Number(c[1])]))}),a.validator.autoCreateRanges(null!b.minnull!b.max(b.range[b.min,b.max],delete b.min,delete b.max),null!b.minlengthnull!b.maxlength(b.rangelength[b.minlength,b.maxlength],delete b.minlength,delete b.maxlength)),b},normalizeRule:function(b){if(stringtypeof b){var c{};a.each(b.split(/\s/),function(){c[this]!0}),bc}return b},addMethod:function(b,c,d){a.validator.methods[b]c,a.validator.messages[b]void 0!d?d:a.validator.messages[b],c.length3a.validator.addClassRules(b,a.validator.normalizeRule(b))},methods:{required:function(b,c,d){if(!this.depend(d,c))returndependency-mismatch;if(selectc.nodeName.toLowerCase()){var ea(c).val();return ee.length0}return this.checkable(c)?this.getLength(b,c)0:b.length0},email:function(a,b){return this.optional(b)||/^[a-zA-Z0-9.!#$%*\/?^_{|}~-][a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(a)},url:function(a,b){return this.optional(b)||/^(?:(?:(?:https?|ftp):)?\/\/)(?:\S(?::\S*)?)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9])(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9])*(?:\.(?:[a-z\u00a1-\uffff]{2,})).?)(?::\d{2,5})?(?:[/?#]\S*)?$/i.test(a)},date:function(a,b){return this.optional(b)||!/Invalid|NaN/.test(new Date(a).toString())},dateISO:function(a,b){return this.optional(b)||/^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test(a)},number:function(a,b){return this.optional(b)||/^(?:-?\d|-?\d{1,3}(?:,\d{3}))?(?:\.\d)?$/.test(a)},digits:function(a,b){return this.optional(b)||/^\d$/.test(a)},creditcard:function(a,b){if(this.optional(b))returndependency-mismatch;if(/[^0-9 \-]/.test(a))return!1;var c,d,e0,f0,g!1;if(aa.replace(/\D/g,),a.length13||a.length19)return!1;for(ca.length-1;c0;c--)da.charAt(c),fparseInt(d,10),g(f*2)9(f-9),ef,g!g;return e%100},minlength:function(b,c,d){var ea.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||ed},maxlength:function(b,c,d){var ea.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||de},rangelength:function(b,c,d){var ea.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||ed[0]ed[1]},min:function(a,b,c){return this.optional(b)||ac},max:function(a,b,c){return this.optional(b)||ca},range:function(a,b,c){return this.optional(b)||ac[0]ac[1]},equalTo:function(b,c,d){var ea(d);return this.settings.onfocusoute.off(.validate-equalTo).on(blur.validate-equalTo,function(){a(c).valid()}),be.val()},remote:function(b,c,d){if(this.optional(c))returndependency-mismatch;var e,f,gthis.previousValue(c);return this.settings.messages[c.name]||(this.settings.messages[c.name]{}),g.originalMessagethis.settings.messages[c.name].remote,this.settings.messages[c.name].remoteg.message,dstringtypeof d{url:d}||d,g.oldb?g.valid:(g.oldb,ethis,this.startRequest(c),f{},f[c.name]b,a.ajax(a.extend(!0,{mode:abort,port:validatec.name,dataType:json,data:f,context:e.currentForm,success:function(d){var f,h,i,jd!0||trued;e.settings.messages[c.name].remoteg.originalMessage,j?(ie.formSubmitted,e.prepareElement(c),e.formSubmittedi,e.successList.push(c),delete e.invalid[c.name],e.showErrors()):(f{},hd||e.defaultMessage(c,remote),f[c.name]g.messagea.isFunction(h)?h(b):h,e.invalid[c.name]!0,e.showErrors(f)),g.validj,e.stopRequest(c,j)}},d)),pending)}}});var b,c{};a.ajaxPrefilter?a.ajaxPrefilter(function(a,b,d){var ea.port;aborta.mode(c[e]c[e].abort(),c[e]d)}):(ba.ajax,a.ajaxfunction(d){var e(modein d?d:a.ajaxSettings).mode,f(portin d?d:a.ajaxSettings).port;returnaborte?(c[f]c[f].abort(),c[f]b.apply(this,arguments),c[f]):b.apply(this,arguments)})});服务端登录controller代码 package com.example.seckilldemo.controller;import com.example.seckilldemo.service.UserService; import com.example.seckilldemo.vo.LoginVo; import com.example.seckilldemo.vo.RespBean; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid;/*** Author wuyifan* Date 2024/4/22 16:03* Version 1.0*/ Controller RequestMapping(/login) Slf4j public class LoginController {Autowiredprivate UserService userService;RequestMapping(/toLogin)public String toLogin(){return login;}/* RequestMapping注解用于将HTTP请求映射到该方法上。当客户端发送一个URL为/doLogin的请求时Spring将调用这个方法来处理请求。*/RequestMapping(/doLogin) /* ResponseBody这个注解表示该方法的返回值将直接作为HTTP响应的内容而不是通过视图解析器进行渲染。通常用于返回JSON数据或其他格式的数据。*/ResponseBody /* 通过在LoginVo类的属性上添加校验规则注解如NotBlank、Size等可以对该对象的属性进行验证。当使用Valid注解标记一个对象参数时Spring会自动触发验证过程检查该对象的属性是否满足校验规则。*/public RespBean doLogin(Valid LoginVo loginVo, HttpServletRequest request,HttpServletResponse response){return userService.doLogin(loginVo, request, response);}} 登录验证的service代码 随机生成一个uuid作为key将用户登陆信息使用Redis存储将key作为cookie返回。 package com.example.seckilldemo.service.impl;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.example.seckilldemo.exception.GlobalException; import com.example.seckilldemo.mapper.UserMapper; import com.example.seckilldemo.pojo.User; import com.example.seckilldemo.service.UserService; import com.example.seckilldemo.utils.*; import com.example.seckilldemo.vo.LoginVo; import com.example.seckilldemo.vo.RespBean; import com.example.seckilldemo.vo.RespBeanEnum; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import org.thymeleaf.util.StringUtils;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;/*** Author wuyifan* Date 2024/4/22 15:57* Version 1.0*/ Service public class UserServiceImpl extends ServiceImplUserMapper, User implements UserService {Autowiredprivate UserMapper userMapper;Autowiredprivate RedisTemplateString,Object redisTemplate;Overridepublic RespBean doLogin(LoginVo loginVo, HttpServletRequest request, HttpServletResponse response) {String mobile loginVo.getMobile();String password loginVo.getPassword();//使用自定义注解完成字段检验 // if (StringUtils.isEmpty(mobile) || StringUtils.isEmpty(password)) { // return RespBean.error(RespBeanEnum.LOGIN_ERROR); // } // if(!ValidatorUtil.isMobile(mobile)){ // return RespBean.error(RespBeanEnum.MOBILE_ERROR); // }User user userMapper.selectById(mobile);if(null user){log.error(查詢失敗); // return RespBean.error(RespBeanEnum.LOGIN_ERROR);throw new GlobalException(RespBeanEnum.LOGIN_ERROR);}if(!MD5Util.formPassToDBPass(password,user.getSalt()).equals(user.getPassword())){ // return RespBean.error(RespBeanEnum.LOGIN_ERROR);throw new GlobalException(RespBeanEnum.LOGIN_ERROR);}//生成cookieString ticket UUIDUtil.uuid();//将用户信息存入Redis中redisTemplate.opsForValue().set(user:ticket,user); // request.getSession().setAttribute(ticket,user);CookieUtil.setCookie(request,response,userTicket,ticket); // System.out.println(CookieUtil.getCookieValue(request, userTicket));return RespBean.success(ticket);}Overridepublic RespBean updatePassword(String userTicket, String pwd, HttpServletResponse response, HttpServletRequest request) {User user getUserByCookie(userTicket,request,response);if(user null)throw new GlobalException(RespBeanEnum.MOBILE_NOT_EXIST);user.setPassword(MD5Util.inputPassToDBPass(pwd,user.getSalt()));int result userMapper.updateById(user);if(1 result){redisTemplate.delete(user:userTicket);return RespBean.success();}return RespBean.error(RespBeanEnum.PASSWORD_UPDATE_FAIL);}Overridepublic User getUserByCookie(String userTicket, HttpServletRequest request, HttpServletResponse response) {if(StringUtils.isEmpty(userTicket))return null;User user (User) redisTemplate.opsForValue().get(user:userTicket);if(user ! null){CookieUtil.setCookie(request,response,userTicket,userTicket);}return user;}} 实现自定义拦截器方法实现WebMvcConfigurer 接口使得springMVC调用服务接口时进行用户身份解析 package com.example.seckilldemo.config;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.web.method.support.HandlerMethodArgumentResolver; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;import java.util.List;/*** Author wuyifan* Date 2024/4/24 12:01* Version 1.0*/ Configuration //这个注解启用了Spring MVC的功能用于处理Web请求和响应。 EnableWebMvc public class WebConfig implements WebMvcConfigurer {//UserArgumentResolver是一个自定义的参数解析器用于解析请求中的用户信息。AutowiredUserArgumentResolver userArgumentResolver;Autowiredprivate AccessLimitInterceptor accessLimitInterceptor;// 这个方法是WebMvcConfigurer接口的一个回调方法用于添加自定义的参数解析器。 // 将userArgumentResolver添加到参数解析器列表中以便在处理请求时使用该解析器解析用户信息。Overridepublic void addArgumentResolvers(ListHandlerMethodArgumentResolver resolvers) {resolvers.add(userArgumentResolver);}/* 这个方法是WebMvcConfigurer接口的一个回调方法用于添加拦截器。将accessLimitInterceptor添加到拦截器列表中以便在请求处理之前进行接口限流的拦截。*/Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(accessLimitInterceptor);}//静态资源展示Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler(/**).addResourceLocations(classpath:/static/);//swagger 和 knife4jregistry.addResourceHandler(swagger-ui.html).addResourceLocations(classpath:/META-INF/resources/);registry.addResourceHandler(doc.html).addResourceLocations(classpath:/META-INF/resources/);registry.addResourceHandler(/webjars/**).addResourceLocations(classpath:/META-INF/resources/webjars/);}}两种方法获取用户登录信息一种是通过获取Redis里存储的用户信息另一种是使用ThreadLocal获取用户信息(后面使用接口限流会给出方法)。 package com.example.seckilldemo.config;import com.example.seckilldemo.pojo.User; import com.example.seckilldemo.service.UserService; import com.example.seckilldemo.utils.CookieUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.MethodParameter; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; import org.springframework.web.bind.support.WebDataBinderFactory; import org.springframework.web.context.request.NativeWebRequest; import org.springframework.web.method.support.HandlerMethodArgumentResolver; import org.springframework.web.method.support.ModelAndViewContainer;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;/*** Author wuyifan* Date 2024/4/24 12:05* Version 1.0*/ Component public class UserArgumentResolver implements HandlerMethodArgumentResolver {Autowiredprivate UserService userService;Overridepublic boolean supportsParameter(MethodParameter parameter) {Class? parameterType parameter.getParameterType();return parameterType User.class;}Overridepublic Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {HttpServletRequest nativeRequest webRequest.getNativeRequest(HttpServletRequest.class);HttpServletResponse nativeResponse webRequest.getNativeResponse(HttpServletResponse.class);String userTicket CookieUtil.getCookieValue(nativeRequest, userTicket);System.out.println(userTicketuserTicket);if (StringUtils.isEmpty(userTicket)) {return null;}return userService.getUserByCookie(userTicket,nativeRequest,nativeResponse);} }
http://www.tj-hxxt.cn/news/139481.html

相关文章:

  • 琼海网站建设公司wordpress自适应手机
  • 产品展示网站含后台网站模板下载福田公司名称及地址
  • 工程招标建设部指定网站wordpress在线更新要多久
  • 做 了一个 家教 网站北京外贸进出口公司
  • 石家庄营销网站建设多少钱手机端网站 优帮云
  • 全景网站模版做网站会用到的代码单词
  • 农机网站建设目标免费网站维护
  • 品牌网站建设预算简单的个人网站制作流程
  • 如何搜索公司所有的网站国外虚拟主机 两个网站
  • 网站工程和网络工程有什么区别网页设计制作课程
  • 网站seo计划网站设计的目的和功能
  • 南阳网站建设多少钱惠济免费网站建设
  • 网站买卖需要注意什么秦皇岛网签合同查询
  • 找哪些公司做网站自适应网站 与响应式
  • 南京网站建设 雷仁做企业网站哪家强
  • 网站价格表wordpress头像大小不一样
  • 免费网站建站app东莞58同城招聘网
  • 萍缘网站建设工作全网营销有哪些平台
  • wordpress站点费用个人网站建设存在哪些问题
  • 南京h5 网站建设建设部网站首页格式合同
  • 宝安网站设计制作网站开发定制宣传图片
  • 做外贸兼职的网站邯郸
  • 超市设计网站百度推广和优化
  • 廊坊网站关键字优化网站建设特点
  • 郑州建设网站哪家好配音网站赚钱
  • 建设大型网站需要什么硬件鄂州网站建设设计
  • 免费网站空间php个人网页设计作业
  • 家电设计网站胶州哪家公司做网站
  • 小企业网站价格wordpress改变访问目录
  • 江西昌宇建设工程公司网站网站制公司