JSF ile bir kitap CD satış sistesi yazdık ve sayfalara erişim kısıtlması için Apache Shiro kullandık fakat kullanıcı üye girişi yaptıktan sonra adres çubuğuna üye giriş sayfasının linkini girerse tekrar üye giriş sayfasına gidiyor. Apache Shiro'da üye giriş yaptıktan sonra üye giriş sayfasını kapatmanın bir yolu var mı? Yapmayı istediğim şeyi şu şekilde özetleyebiliriz: -Kullanıcı üye giriş sayfasından giriş yapacak. -Akabinde adres çubuğuna tekrar üye giriş sayfasının linkini yazacak. -Adresi yazıp girmeye çalıştığında ana sayfaya ya da belirlediğimiz herhangi bir sayfaya yönlendirilecek.

soruldu: 16 Nis '15, 14:31

ilkay's gravatar image

ilkay
726333649
cevap kabul oranı: 13%


Apache Shiro authentication islemlerinde login olmussa zaten direk login sayfasini atlayarak ana sayfaya (home, dashboard vb.) gecebilirsiniz. Sanirim ShiroFilter ve shiro.ini islemlerinizde eksiklikler var, kodlari gormeden anlayabilmek zor. Siz önce temel Apache Shiro islemlerini gozden gecirin, asagidaki linkte Apache Shiro ve JSF projesi degisik bircok opsiyon ile anlatilmis, sanirim eksiklerinizi gidermede cok yardimci olur.

JSF2-Shiro Tutorial

Güncelleme: LoginController icinde login ve isLoggedIn metodlari yazarak kolayca yapilabilir.


// LoginController.java icerisinde

// getters ve setters yazilmali!
private String username;
private String password;
private boolean rememberMe;

public String login() {
  // login islemleri yapilir
  Subject currentUser = SecurityUtils.getSubject();

if (!currentUser.isAuthenticated()) {
    UsernamePasswordToken token = new UsernamePasswordToken(username, password);
    token.setRememberMe(false);

try {
      currentUser.login(token);
      getLogger().debug("Login basarili : " + username);
      return LOGIN_SUCCESS_URL;
    } catch (UnknownAccountException uae) {
      getLogger().error("Tanimsiz kullanici adi veya parola: " + username);
    } catch (IncorrectCredentialsException ice) {
      // parola yanlis
      getLogger().error("Tanimsiz kullanici adi veya parola : " + username);
    } catch (LockedAccountException lae) {
      getLogger().error("Kullanici bloklanmis!: " + username);
    } catch (AuthenticationException ae) {
      getLogger().error("AuthenticationException: " + username);
    } catch (Exception e) {
      getLogger().error("Exception in Login: " + username);
    }

return LOGIN_FAILURE_URL; // "/login.xhtml"

} else {
    return LOGIN_SUCCESS_URL; // "/app/dashboard.xhtml?faces-redirect=true"
  }
}

// logout islemleri
public String logout() {
  Subject currentUser = SecurityUtils.getSubject();
  currentUser.logout();
  return LOGIN_URL;
}

// kullanici login olmus mu?
public void isLoggedIn(ComponentSystemEvent evt) {
  if (SecurityUtils.getSubject().isAuthenticated()) {
    FacesContext context = FacesContext.getCurrentInstance();
      ((ConfigurableNavigationHandler) context.getApplication()
         .getNavigationHandler())
         .performNavigation(LOGIN_SUCCESS_URL);
   }
}

Login xhtml icerisinde asagidaki gibi kontrol edilebilir!


<!DOCTYPE html>
<html lang="#{localeController.language}" 
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core">

<f:view locale="#{localeController.locale}" encoding="UTF-8" contentType="text/html">
    <h:head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title>
            <ui:insert name="title"&gt;My JSF App&lt;/ui:insert>
        </title>

        <!-- JSF 2.2 ile calisir, oncesinde calismayabilir!-->
        <f:metadata>  
           <f:event type="preRenderView" 
                listener="#{loginController.isLoggedIn}" 
                onPostback="false"></f:event>  
        </f:metadata>
    </h:head>

    <h:body>
      <!-- login islemleri... -->    
    </h:body>
</f:view>

</html>

permanent link

cevaplandı: 17 Nis '15, 17:20

CemIkta's gravatar image

CemIkta ♦
19.8k29125190
cevap kabul oranı: 36%

değiştirildi: 18 Nis '15, 07:57

Teşekkür ederim. Apache Shiro'nun bahsettiğimiz tarzda desteği yokmuş. Kişinin adres çubuğundan girdiği adresi oturum açılma durumuna göre yönlendirme işlemini bir filter yazarak halledebildim.

(18 Nis '15, 06:00) ilkay ilkay's gravatar image
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:

×281
×8

Soruldu: 16 Nis '15, 14:31

Görüntüleme: 1,838 kez

Son güncelleme: 18 Nis '15, 07:57

powered by BitNami OSQA