تجربه های Jhipster قسمت اول

تجربه هیپستر

یکی از موضوعات جالبی که تو این چند سال با آن برخورد کردم Jhipster بود . من خیلی روی استاندارد بودن رویکرد فنی که انتخاب میکنم حساس هستم .همیشه وقتی سعی دارم مشکلی رو حل کنم یا کار جدیدی را انجام بدم اول سعی میکنم مثل همه دنبال بهترین تجربه و استایل انجام اون کار باشم تا حسابی راضی بشم که کار رو درست انجام دادم  . معمولا پاسخ به این حساسیت خیلی ساده نیست .چون امکان داره روش های متنوعی رو پیدا کنی .حالا در نظر بگیرید که بخواهید در یک چالش فنی با ۱۰ تا چیز جدید رودرو بشی در این صورت ببینید چه اتفاقی خواهد افتاد . من تو سال ۲۰۱۵ با Jhipster اشنا شدم .یک پروژه عالی که به نظرم جمع شده از بهترین تجارب Full Stack است. از Front بگیر تا  Backend خیلی برای من جذاب و هیجان انگیر بود.باعث شد خیلی روشهای خوب را ازاین تکنولوژی یاد بگیرم و تقریبا هر جا که با مشکلی بر میخورد میکنم به اون رجوع میکنم و خیلی چیزها را از اون یاد گرفتم.

ولی ای کاش یک چالش تو اون بهتر در نظر گرفته می شد . اگه تجربه کار کردن با جاوا و مخصوصا Spring رو داشته باشید قطعا میدونید باید یه مجموعه تنظیمات انجام بدید تا پروژه شما درست کار کنه و کافی یک مرحله رو درست انجام ندید قطعا پروژه استارت نمیشه . البته این مشکل با اضافه شدن پروژه Boot خیلی بهتر و کاملتر شده است .من اخرین تجربه ای که داشتم رو براتون بگم .من رو پروژه ای کار میکنم که احراز هویت آن بر اساس توکن میباشد . تصمیم گرفتیم به این پروژه یک ماژول ساده چت اضافه کنیم که مشتریان بتونن با هم چت کنن برای این موضوع نیاز داشتم که از تکنولوژی WebSocket استفاده کنم برای اینکار نیاز داشتم تنظیماتی رو به پروژه اضافه کنم شروع کردم به انجام این کار و کار درست پیش رفت و همه چی درست پیش میرفت تا این که دیدم با این حال که کاربر احراز هویت کرده بود ولی کاربر رو ناشناس نشون میداد بعد از چند ساعت متوجه شدم که باید در اولین کانکشن به وب سوکت توکن JWT رو هم ارسال کنم بنابراین نیاز بود اول SockJs رو به روز میکردم تا امکان ارسال پارامتر رو در حین ارتباط ارسال کنم

var wrappedSocket = {
             init: function (url) {
   var authToken = AuthServerProvider.getToken();
                 if(authToken){
                     url += '?access_token=' + authToken;
                 }
                 stompClient = Stomp.over(new SockJS(url));
             },
             connect: function (successCallback, errorCallback) {
                 stompClient.connect({}, function (frame) {
                     $rootScope.$apply(function () {
                         successCallback(frame);
                     });
                 }, function (error) {
                     $rootScope.$apply(function () {
                         errorCallback(error);
                     });
                 });
             }      
   }

از طرفی باید در فیلتر هم این موضوع رو اضافه میکردم که هم بتونم اطلاعات رو از هدر بخونم هم از پارامتر مثل کد زیر

     private String resolveToken(HttpServletRequest request){ 
         String bearerToken = request.getHeader(JWTConfigurer.AUTHORIZATION_HEADER);
         if (StringUtils.hasText(bearerToken) && bearerToken.startsWith("Bearer ")) {
             return bearerToken.substring(7, bearerToken.length());
         }
   String jwt = request.getParameter(JWTConfigurer.AUTHORIZATION_TOKEN);
         if (StringUtils.hasText(jwt)) {
             return jwt;
         }
         return null;
     }

بنابراین این دو تا تنظیم کلید حل این مشکل بود بعد از کلی فکر کردن و کمک کردن از Jhipster این مشکل رو حل کردم و دیدم اره هیپستر هم همین کارو انجام داده ."یه نکته یادم نره من تقریبا هر کاری رو شروع میکنم خودم شروع کنم و بعد اگه مشکل برخورد کردم سراغ Jhipster میرم فکر میکنم این جوری دقیق تر و عمیق تر مطلب رو یاد میگیرم و کل پروژه رو بر مبنای Jhipster نمیرم " اولین چیزی که به ذهنم رسید اینه. خوب آیا این ترفندها رو Jhipster جایی نوشته مگه کسی که این تجربه ها رو داخل Genrator هیپستر قرار داده قبلا با این مشکل رو درو نشده بوده . شاید اگه این ترفندها جایی بود باعث میشد من زودتر این مشکل رو پیدا کنم .سوالم اینه چرا جایی وجود نداره که این ترفندها توش قرار داده شده باشه