[{"data":1,"prerenderedAt":266},["ShallowReactive",2],{"page-tr-\u002Fblog\u002Fspring-security-primefaces-redirect-issue-fix":3,"related-tr-\u002Fblog\u002Fspring-security-primefaces-redirect-issue-fix":245},{"id":4,"title":5,"body":6,"date":230,"description":231,"extension":232,"meta":233,"navigation":234,"path":235,"seo":236,"stem":237,"tags":238,"translation":243,"__hash__":244},"pages_tr\u002Ftr\u002Fblog\u002Fspring-security-primefaces-redirect-issue-fix.md","Spring Security + PrimeFaces Yönlendirme Problemi Çözümü",{"type":7,"value":8,"toc":228},"minimark",[9,21,39,128,131,136,144,149,155,164,167,177,180,188,193,199,204,210,224],[10,11,12,13,20],"p",{},"Spring Security, Java EE dünyasında kabul görmüş ve java uygulamaları için -bence- güvenlik için bulunmaz bir nimet. Ayrıntılı bilgiye ",[14,15,19],"a",{"href":16,"rel":17},"http:\u002F\u002Fprojects.spring.io\u002Fspring-security\u002F",[18],"nofollow","sitesinden ulaşabilirsiniz",".",[10,22,23,24,29,30,38],{},"PrimeFaces da JSF dünyasında kabul gören en başarılı bileşen kütüphanesi, yine bu adresten ",[14,25,28],{"href":26,"rel":27},"http:\u002F\u002Fwww.primefaces.org",[18],"detaylı bilgiye ulaşabilirsiniz",".\nJSF 2.2 + Spring 4 + Hibernate 4 + PrimeFaces 5 şeklinde altyapısını kurguladığım projemde fark ettim ki başarılı bir giriş (login) işlemi sonrası sayfa gitmesi gereken URL’e gitmiyor. Spring Security loglarını incelediğimde ise herhangi bir problem olmadan “",[31,32,33],"strong",{},[14,34,37],{"href":35,"rel":36},"https:\u002F\u002Ftomcat.apache.org\u002Ftomcat-5.5-doc\u002Fservletapi\u002Fjavax\u002Fservlet\u002Fhttp\u002FHttpServletResponse.html#sendRedirect(java.lang.String)",[18],"sendRedirect","” ile konfigürasyondaki belirttiğim URL’e gönderiyor. Her şeyin bu kadar mükemmel olduğu yerde nasıl olur da bu çalışmaz diye kafayı sıyırdım tabi ki 🙂\nSpring Security logu aşağıdaki gibi. \u002Flogin sayfasından istediğim gibi \u002Fpages\u002Fhome sayfasına yönlendirmiş.",[40,41,46],"pre",{"className":42,"code":43,"language":44,"meta":45,"style":45},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[DEBUG] ..access.intercept.FilterSecurityInterceptor – Authorization successful\n[DEBUG] ..security.web.FilterChainProxy            – \u002Fpages\u002Fhome.xhtml reached end of additional filter chain; proceeding with original chain\n[DEBUG] ..web.access.ExceptionTranslationFilter    – Chain processed normally\n[DEBUG] ..web.context.SecurityContextPersistenceFilter – SecurityContextHolder now cleared, as request processing completed\n","bash","",[47,48,49,68,104,116],"code",{"__ignoreMap":45},[50,51,54,58,62,65],"span",{"class":52,"line":53},"line",1,[50,55,57],{"class":56},"sMK4o","[",[50,59,61],{"class":60},"sTEyZ","DEBUG",[50,63,64],{"class":56},"]",[50,66,67],{"class":60}," ..access.intercept.FilterSecurityInterceptor – Authorization successful\n",[50,69,71,73,75,77,80,84,87,90,94,98,101],{"class":52,"line":70},2,[50,72,57],{"class":56},[50,74,61],{"class":60},[50,76,64],{"class":56},[50,78,79],{"class":60}," ..security.web.FilterChainProxy            – \u002Fpages\u002Fhome.xhtml reached ",[50,81,83],{"class":82},"s7zQu","end",[50,85,86],{"class":60}," of additional filter chain",[50,88,89],{"class":56},";",[50,91,93],{"class":92},"sBMFI"," proceeding",[50,95,97],{"class":96},"sfazB"," with",[50,99,100],{"class":96}," original",[50,102,103],{"class":96}," chain\n",[50,105,107,109,111,113],{"class":52,"line":106},3,[50,108,57],{"class":56},[50,110,61],{"class":60},[50,112,64],{"class":56},[50,114,115],{"class":60}," ..web.access.ExceptionTranslationFilter    – Chain processed normally\n",[50,117,119,121,123,125],{"class":52,"line":118},4,[50,120,57],{"class":56},[50,122,61],{"class":60},[50,124,64],{"class":56},[50,126,127],{"class":60}," ..web.context.SecurityContextPersistenceFilter – SecurityContextHolder now cleared, as request processing completed\n",[10,129,130],{},"Başladım daha detaylı incelemeye, önce tarayıcı üzerinde gelen-giden akışı izledim.",[10,132,133],{},[31,134,135],{},"İstek (Request):",[40,137,142],{"className":138,"code":140,"language":141,"meta":45},[139],"language-text","javax.faces.partial.ajax:true\njavax.faces.source:loginButton\njavax.faces.partial.execute:loginForm\njavax.faces.partial.render:loginForm\nloginButton:loginButton\nloginForm:loginForm\nusername:test\npassword:123456\n_csrf:49756ca7-38fd-4777-bea8-58fcfe7deb73\njavax.faces.ViewState:-3601270081246135757:6121484162719565648\n","text",[47,143,140],{"__ignoreMap":45},[10,145,146],{},[31,147,148],{},"Yanıt (Response):",[40,150,153],{"className":151,"code":152,"language":141,"meta":45},[139],"xml version='1.0' encoding='UTF-8'?\n-6140875972550706628:-2367790204853062502\n",[47,154,152],{"__ignoreMap":45},[10,156,157,158,163],{},"Bunları görünce tabi ki ",[14,159,162],{"href":160,"rel":161},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=gbnhydOczwI",[18],"“Aman Tanrım didim”",", neden mi? 🙂",[10,165,166],{},"Çünkü gelen yanıtta “redirect-url” yok! Sadece “update” var! Yani ajax işinde hata yapmışız (javax.faces.partial.ajax:true) ve bunu aşmak için önümüzde iki yol var;",[168,169,170,174],"ol",{},[171,172,173],"li",{},"Primefaces commandButton özelliklerinde ajax=”false” demek",[171,175,176],{},"Primefaces butonu yerine klasik JSF butonu kullanmak",[10,178,179],{},"Kullandığım buton",[40,181,184],{"className":182,"code":45,"language":183,"meta":45,"style":45},"language-xml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","xml",[47,185,186],{"__ignoreMap":45},[50,187],{"class":52,"line":53},[168,189,190],{},[171,191,192],{},"yol",[40,194,195],{"className":182,"code":45,"language":183,"meta":45,"style":45},[47,196,197],{"__ignoreMap":45},[50,198],{"class":52,"line":53},[168,200,201],{"start":70},[171,202,203],{},"yol (primefaces butonunun css’inden faydalanamazsınız, elle eklemeniz lazım)",[40,205,206],{"className":182,"code":45,"language":183,"meta":45,"style":45},[47,207,208],{"__ignoreMap":45},[50,209],{"class":52,"line":53},[10,211,212,213,218,219],{},"Sonuç olarak bu kadar basit görünse de tarayıcı üzerindeki trafiği izlemeden ben anlayamadım. Bu arada tüm tarayıcılarda neredeyse standart haline geldi, “Developer Tools” deniliyor genelde ve F12 tuşu ile açabiliyorsunuz, bilmeyenler olabilir diye bahsedeyim dedim.\nBunların dışında Spring Security’nin “sendRedirect” yaptığı yeri ezerek (override) de bu işi yapabilirdik ama daha maliyetli olurdu. Nasıl yapılabileceği ",[14,214,217],{"href":215,"rel":216},"http:\u002F\u002Fstackoverflow.com\u002Fquestions\u002F9305144\u002Fusing-jsf-2-0-facelets-is-there-a-way-to-attach-a-global-listener-to-all-ajax\u002F9311920#9311920",[18],"şuradaki cevapta"," üstad BalusC tarafından verilmiş 🙂\nSorunun temeline de ",[14,220,223],{"href":221,"rel":222},"http:\u002F\u002Fstackoverflow.com\u002Fquestions\u002F10954319\u002Fjsf-2-response-sendredirect-is-not-working",[18],"şu kaynaktan bakılabilir.",[225,226,227],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":45,"searchDepth":70,"depth":70,"links":229},[],"2015-05-15","Spring Security ile PrimeFaces kullanılırken ortaya çıkan yönlendirme probleminin çözümü.","md",{},true,"\u002Ftr\u002Fblog\u002Fspring-security-primefaces-redirect-issue-fix",{"title":5,"description":231},"tr\u002Fblog\u002Fspring-security-primefaces-redirect-issue-fix",[239,240,241,242],"java","jsf","primefaces","spring","\u002Fen\u002Fblog\u002Fspring-security-primefaces-redirect-issue-fix","ZFReUm2bjk0Zopl5_MX9BQzUPD1s781umxBGD3W0YQY",[246,253,260],{"path":247,"title":248,"description":249,"date":250,"tags":251},"\u002Ftr\u002Fblog\u002Fjava-21-features","Java 21 Yenilikleri: Virtual Threads, Records ve Pattern Matching","Java 21 LTS ile gelen ve günlük kodu en çok değiştiren özellikler — virtual threads, record'lar, switch pattern matching, record pattern'leri, sealed sınıflar ve sequenced collections.","2026-11-01",[239,252],"rehber",{"path":254,"title":255,"description":256,"date":257,"tags":258},"\u002Ftr\u002Fblog\u002Finstall-java-on-centos-7-rhel-7","CentOS 7 & Red Hat Enterprise Linux 7 Java Kurulumu","CentOS 7 ve RHEL 7 üzerine yum ile Java 11 (OpenJDK) kurulumu ve alternatif sürüm seçimi — adım adım kısa rehber.","2019-11-08",[239,259],"linux",{"path":261,"title":262,"description":263,"date":264,"tags":265},"\u002Ftr\u002Fblog\u002Fjava-11-12-13-and-beyond","Java 11-12-13 ve …","Java 11 ve sonrasındaki sürümlerde gelen yenilikler: yeni sürüm döngüsü ve dikkat çeken özellikler.","2019-02-13",[239],1793491379789]