تقدم هذه المقالة Spring Security Oauth2.0 لتنفيذ أمثلة تسجيل الدخول إلى رمز التحقق من الرسائل القصيرة ، ومشاركتها معك ، على النحو التالي:
حدد رمز تسجيل الدخول إلى رقم الهاتف المحمول
/** * @Author Length * date 2018/1/9 * رمز تسجيل الدخول إلى رقم الهاتف المحمول */الفئة العامة mobileAuthenticationToken يمتد ملخص ustructionTicationToken {private static final long serialversionuid = springsecuritycorevent.serial_version_uid ؛ كائن نهائي خاص ؛ MobileAuthenticationToken (سلسلة mobile) {super (null) ؛ this.principal = mobile ؛ setAuthenticated (خطأ) ؛ } MobileAuthenticationToken (كائن كائن ، المجموعة <؟ تمتد السلطات GrantedAuthority>) {super (السلطات) ؛ this.principal = المدير ؛ super.setauthenticated (صحيح) ؛ } الكائن العام getPrincipal () {return this.principal ؛ } Override public object getCredentials () {return null ؛ } public void setauthenticated (boolean isauthenticated) يلقي alfictalargumentException {if (isauthenticated) {رمي جديد غير alficalargumentexception ( } super.setAuthenticated (false) ؛ } Override public void erasecredentials () {super.erasecredentials () ؛ }}منطق تسجيل الدخول رقم الهاتف المحمول
/** * @Author Length * date 2018/1/9 * منطق تسجيل الدخول إلى رقم الهاتف المحمول */الفئة العامة mobileAuthenticationProvider تنفذ AuthenticationProvider {private uservice uservice ؛ Override مصادقة المصادقة العامة (مصادقة المصادقة) يلقي المصادقة {mobileAuthenticationToken MobileAuthenticationToken = (MobileAuthenticationToken) مصادقة ؛ uservo uservo = userService.finduserByMobile ((string) mobileAuthenticationToken.getPrincipal ()) ؛ userDetailsImpl userDetails = BuildUserDeatils (uservo) ؛ if (userDetails == null) {رمي internalaUthenticationserviceException ("رقم الهاتف المحمول غير موجود:" + mobileAuthenticationToken.getPrincipal ()) ؛ } mobileAuthenticationToken AuthenticationToken = جديد mobileAuthenticationToken (userDetails ، userDetails.getAuthorities ()) ؛ AuthenticationToken.setDetails (MobileAuthenticationToken.getDetails ()) ؛ إرجاع المصادقة. } userDetailsImplsplesplateLs (uservo uservo) {إرجاع userDetailsImpl جديد (uservo) ؛ } Override Public Boolean Support (Class <؟> المصادقة) {return mobileAuthenticationToken.class.isAssignableFrom (المصادقة) ؛ } public uservice getUserService () {return werveservice ؛ } public void setuserservice (UserService userService) {this.userservice = userService ؛ }}معالجة مرشح عملية تسجيل الدخول
/** * @Author طول * date 2018/1/9 * مرشح تسجيل الدخول إلى رقم الهاتف المحمول */الفئة العامة mobileAuthenticationFilter يمتد الملخصات ustressicationprocessingfilter {public Static Final String spring_security_form_mobile_key = "mobile" ؛ سلسلة خاصة mobileparameter = spring_security_form_mobile_key ؛ المنطقية الخاصة postonly = صواب ؛ public mobileAuthenticationFilter () {super (جديد antathrequestmatcher (securityConstants.mobile_token_url ، "post")) ؛ } محاولة المصادقة العامة (طلب httpservletrequest ، استجابة httpservletresponse) يلقي المصادقة {if (postonly &&! request.getMethod (). متساوٍ (httpmethod.post.name ()))) } string mobile = getMobile (request) ؛ if (mobile == null) {mobile = "" ؛ } mobile = mobile.trim () ؛ mobileAuthenticationToken MobileAuthenticationToken = جديد mobileAuthenticationToken (Mobile) ؛ setDetails (طلب ، mobileAuthenticationToken) ؛ إرجاع this.getAuthenticationManager (). المصادقة (mobileAuthenticationToken) ؛ } سلسلة محمية تم الحصول عليها (طلب httpservletrequest) {return request.getParameter (mobileparameter) ؛ } setDetails void المحمية (طلب httpservletrequest ، mobileAuthenticationToken AuthRequest) {authRequest.setDetails (antainticationDetailsSource.BuildDetails (request)) ؛ } public void setPostonly (boolean postonly) {this.postonly = postonly ؛ } السلسلة العامة getMobileParameter () {return mobileparameter ؛ } public void setMobileParameter (String mobileparameter) {this.mobileparameter = mobileparameter ؛ } boolean public iSpostonly () {return postonly ؛ }}موقع الرمز المميز للإنتاج
/** * طول Author * date 2018/1/8 * ينجح تسجيل رقم الهاتف المحمول ويعيد رمز OAuth */ @componentpublic mobiLeloginsucsHaStHandler تنفذ org.springframework.security.web.authentication. @autowired objectMapper ObjectMapper ؛ Autowired Private ClientDetailsService ClientDetailsService ؛ AUTOWIRED SARBLIZATIONSERVERTOKENSERVICES AuthorizationServertokenServices ؛ Override public void onauthenticationsuccess (طلب httpservletrequest ، استجابة httpservletresponse ، مصادقة المصادقة) {string header = request.getheader ("Ouditization") ؛ if (header == null ||! header.startswith ("basic"))) } حاول {string [] الرموز = extractandDecodeHeader (header) ؛ تأكيد الرموز. الطول == 2 ؛ سلسلة clientId = الرموز [0] ؛ String ClientSecret = الرموز [1] ؛ jsonobject params = new jsonobject () ؛ params.put ("clientId" ، clientId) ؛ params.put ("ClientsCret" ، ClientsCret) ؛ params.put ("المصادقة" ، المصادقة) ؛ clientDetails clientDetails = clientDetailsService.LoadClientByclientId (clientId) ؛ tokenRequest tokenRequest = new tokenRequest (mapuTil.newhashMap () ، clientId ، clientDetails.getScope () ، "mobile") ؛ Oauth2Request Oauth2Request = tokenRequest.CreateOauth2Request (ClientDetails) ؛ OAuth2Authentication OAuth2Authentication = OAUTH2Authentication جديد (OAUTH2Request ، المصادقة) ؛ OAuth2AccessToken OAuth2AccessToken = SuapterIzationServertokenServices.CreateAcCessToken (Oauth2Authentication) ؛ logger.info ("Get Token Success: {}" ، Oauth2AccessToken.getValue ()) ؛ استجابة. استجابة. printWriter printWriter = response.getWriter () ؛ printWriter.Append (ObjectMapper.WriteValueAsString (Oauth2AccessToken)) ؛ } catch (ioException e) {رمي new badcredentialSexception ("فشل في فك تشفير رمز المصادقة الأساسي") ؛ }} /*** يفكّر الرأس في اسم المستخدم وكلمة المرور. * * throws badcredentialsexception إذا لم يكن الرأس الأساسي غير موجود أو غير صالح * base64 */ private string [] extractandDecodeHeader (string header) يلقي iOexception {byte [] base64token = header.substring (6) .getBytes ("utf-8") ؛ بايت [] فك تشفير. حاول {decoded = base64.decode (base64token) ؛ } catch (alfictalArgumentException e) {رمي new badcredentialSexception ("فشل في فك تشفير رمز المصادقة الأساسي") ؛ } string token = سلسلة جديدة (فك تشفير ، commonConstant.UTF8) ؛ int delim = token.indexof (":") ؛ if (delim == -1) {رمي new badcredentialSexception ("رمز المصادقة الأساسي غير صالح") ؛ } إرجاع سلسلة جديدة [] {token.substring (0 ، delim) ، token.substring (delim + 1)} ؛ }}تكوين التخصيص أعلاه
// ** * @Author Length * date 2018/1/9 * بوابة تكوين تسجيل الدخول إلى رقم الهاتف المحمول */ @ @ComponentPublic Class MopilesEcurityConfigurer يمتد SecurityConfigureRadapter <DefaultSecurityFilterChain ، httpsecurity> {autowired private mobileloginsucscesshandlerlerlerlilellilellilellilelyscesshandler ؛ @Autowired userverservice uservice ؛ Override public void تكوين (httpsecurity http) يلقي الاستثناء {mobileAuthenticationFilter mobileAuthenticationFilter = جديد mobileauthenticationfilter () ؛ mobileAuthenticationFilter.SetAuthenticationManager (http.getSharedObject (antainticationManager.class)) ؛ mobileAuthenticationFilter.SetAuthenticationsuccessHandler (mobileLoginSuccessHandler) ؛ mobileAuthenticationProvider MobileAuthenticationProvider = new MobileAuthenticationProvider () ؛ mobileAuthenticationProvider.setuserservice (userService) ؛ http.AuthenticationProvider (mobileAuthenticationProvider) .addfilterafter (MobileAuthenticationFilter ، usernamepasswordauthenticationfilter.class) ؛ }}التكوين الكلي المحدد فوق تكوين أمان الربيع
/** * @Author Length * date 9 يناير ، 2018 14:01:25 * تكوين واجهة خادم المصادقة */ @configuration @enablerSourceServerPublic classerverconfiguration يمتد الموارد erresourgerConfigurerAdapter @autowired mobileSecurityConfigurer mobileSecurityConfigurer ؛ Override public void تكوين (httpsecurity http) يلقي الاستثناء {registry .antmatchers ("/mobile/token"). إذن () .anyrequest (). Authenticated (). و () .csrf (). disable () ؛ http.apply (mobilesecurityconfigurer) ؛ }}يستخدم
نسخة الكود كما يلي:
Curl -H "Authorization: BASIC CGLNONBPZW ==" -D "Grant_type = mobile & scope = server & mobile = 17034642119 & code =" http: // localhost: 9999/auth/mobile/token
رمز المصدر
يرجى الرجوع إلى gitee.com/log4j/
استنادًا إلى سحابة الربيع وأمن الربيع OAUTH2.0 ، يتم تطوير المصادقة والترخيص على مستوى المؤسسة ، مما يوفر مراقبة الخدمة المشتركة ، وتتبع الارتباطات ، وتحليل السجل ، وإدارة ذاكرة التخزين المؤقت ، وجدولة المهام والتطبيقات الأخرى
يتم تنفيذ المنطق بأكمله في وضع تسجيل الدخول إلى UsernamePassword لأمان Spring Security ، ويمكنك الرجوع إلى رمز المصدر الخاص به.
منطق إصدار رموز التحقق والتحقق منه بسيط نسبيًا. بعد هذه الطريقة ، استخدم Global Fitter لتحديد ما إذا كان الرمز الموجود في الطلب يتطابق مع رقم الهاتف المحمول. المنطق الرئيسي هو معلمات الرمز المميز.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.