Merhaba, apache shiro ile bir site yapmaya çalışıyorum.rol bazlı engelleme yapabiliyoorum.fakat giriş paneli ayrı bi adresten yapılıyor. ( localhost:8080/proje/login.jsf ) giriş yaptıktan sonra bu sayfaya girmesini nasıl önleyebilirim? /login.xhtml = anon yaptığımda giriş yapsada bu sayfaya geri dönebiliyor buda sorunlara yol açıyor. noSessionCreation denedim işe yaramadı. teşekkürler E.D.

soruldu: 01 May '14, 05:17

Ergin's gravatar image

Ergin
768814
cevap kabul oranı: 50%

Merhaba bunun hakkında bir soru sormuştum eskiden muhteşem bir cevabı var http://stackoverflow.com/questions/20283058/how-to-redirect-already-authenticated-user-from-login-page-to-home-page

(02 May '14, 01:58) molgun molgun's gravatar image

Benim uzun zaman önce web projemde kullandığı yöntemde, login işlemi için veritabanı bağımlı shiro configuration tanımlamalarım ve bir de logout için ayrı bir servlet sınıfım vardı. Login işleminde kullanıcı yetkilendirme süzgecini geçtiğinde url değişkenini farklı bir adrese atıyordum. Ama geri dönüşte giriş başarılı gibi bir mesaj tarayıcıda kalıyordu. Ben de böyle bir duruma karşılık kullanıcının logout olmasını sağlıyordum, gereksiz veya verimsiz olsa da uygulama daha güvenli hale geliyordu, ki ana mesele buydu.

public class LogoutServlet extends HttpServlet 
{
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException 
{
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();

    HttpSession session = request.getSession(true);
    String URLAttachment = response.encodeURL("");
    response.addHeader("url-attmt", URLAttachment);

    try {
        // TO-DO
        } finally {
        out.close();
    }

}...
permanent link

cevaplandı: 01 May '14, 06:21

cagcak's gravatar image

cagcak
16271320
cevap kabul oranı: 25%

Asagidakileri denerseniz olmasi gerekir:

1 - shiro.ini dosyasindaki tanimlamalara dikkat edin:

diger shiro ayarlari yaninda application login url: faces-redirect cok onemli, yoksa jsf navigation yapsa da url degismez!


authc.loginUrl = /login.xhtml?faces-redirect=true

login islemi basarili ise ve java kodu icinde navigasyon verilmiyor, burdan redirect de verilebilir!


authc.successUrl = /dashboard.xhtml?faces-redirect=true

2 - LoginController Bean dosyasi icinde:


@ManagedBean
@SessionScoped
public class LoginController implements Serializable {
   private static final String LOGIN_SUCCESS_URL = "/dashboard.xhtml?faces-redirect=true";

// diger metodlar...

public String login() { // ... }

public String logout() { // ... }

// kullanici login olmussa kontrol eder, daha once eger login olmussa public void isLoggedIn(ComponentSystemEvent evt) { if (SecurityUtils.getSubject().isAuthenticated()) { FacesContext context = FacesContext.getCurrentInstance(); ((ConfigurableNavigationHandler) context.getApplication().getNavigationHandler()) .performNavigation(LOGIN_SUCCESS_URL); } } }

3 - Eger JSF 2.2 kullaniyorsaniz login.xhml dosyasi icinde f:event preRenderView kullanilabilir. JSF 2.0 ve 2.1 ile calismaz! (onPostback="false" yazimi bu sekilde kod editor hepsini kucuk aliyor!)


<h:head>
  <f:metadata>
<f:event type="preRenderView" listener="#{loginController.isLoggedIn}" onpostback="false"></f:event>
</f:metadata> </h:head>

permanent link

cevaplandı: 01 May '14, 08:26

CemIkta's gravatar image

CemIkta ♦
19.9k29125190
cevap kabul oranı: 36%

değiştirildi: 01 May '14, 08:33

Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×8

Soruldu: 01 May '14, 05:17

Görüntüleme: 589 kez

Son güncelleme: 02 May '14, 01:58

powered by BitNami OSQA