JSF & JSP



JSF  te LOGIN SECURITY

Sayfalar
1. index.xhtml
2. login.xhtml
3.secured/securedPage.xhtml

Bütün kullanıcılar index sayfasına erişim hakkı vardır. Fakat güvenli erişime alınmış securedPage sayfaya erişmesi için kayıtlı bir kullanıcı olması gerekmektedir. Bu projede Login Filter kullanılarak
Sayfalarda güvenlik nasıl sağlanacağı anlatılacaktır.
Kullanılan Araçlar
-Netbeans IDE
-Glassfish Server
-JSF 2.0

Proje Dizini

























index.html sayfası
Bu sayfa açılan ilk sayfadır. Bütün kullanıcıların bu sayfaya erişim hakkı vardır.




















login.xhtml sayfası
Kullanıcı güvenli sayfa erişmek için kullanıcı adı ve şifresini kullanarak giriş yapacaktır.

securedPage.xhtml
Bu sayafaya sadece giriş yapan kullanıcılar erişebilir.




Login Class

@ManagedBean
@SessionScoped
public class Login implements Serializable {

    private String username;
    private String password;
    @ManagedProperty(value = "#{redirectPage}")
    RedirectPage redirectPage;
    private boolean logeddIn = false;

    public boolean isLogeddIn() {
        return logeddIn;
    }

    public void setLogeddIn(boolean logeddIn) {
        this.logeddIn = logeddIn;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public RedirectPage getRedirectPage() {
        return redirectPage;
    }

    public void setRedirectPage(RedirectPage redirectPage) {
        this.redirectPage = redirectPage;
    }

    public String doLogin() {

       // Kullanıcılar veritabanından alınabilir

        List<Users> users = new ArrayList<>();
        users.add(new Users("ozay", "1234", Boolean.TRUE));
        users.add(new Users("alican", "12345", Boolean.TRUE));

        for (Users user : users) {
            //succes username ve password
            if (user.getUsername().equals(username)
                    && user.getPassword().equals(password)) {
                logeddIn = true;
                //Yetki verildi
                return redirectPage.redirectToWelcome();
            }
        }
        //Erorr mesajı kullanıcı göstermek çin
        FacesMessage msg = new FacesMessage("Giriş Hatalı \n Lütfen bilgileri doğru giriniz. !", "ERROR MSG");
        msg.setSeverity(FacesMessage.SEVERITY_ERROR);
        FacesContext.getCurrentInstance().addMessage(null, msg);
        // To login Page
        return redirectPage.toLogin();
    }

    public String doLogout() {
        //Kullanıcı oturumu kapattı
         logeddIn = false;
         //Kullanıcı bir mesaj vermek için
        FacesMessage msg = new FacesMessage("Logout Succes", "INFO MSG");
        msg.setSeverity(FacesMessage.SEVERITY_INFO);
        FacesContext.getCurrentInstance().addMessage(null, msg);
        return redirectPage.toLogin();
    }

}

RedirectPage Class

 Bu bean ile sayfalar arasındaki yönlendirme bilgileri aktarıldı.
@ManagedBean
@SessionScoped
public class RedirectPage implements Serializable{
   private static final long serialVersionUID=123544448448L;

    public String redirectToLogin() {
        return "/login.xhtml?faces-redirect=true";
    }

    public String redirectToWelcome() {
        return "/secured/securedPage.xhtml?faces-redirect=true";
    }

    /**
     * Guvenli sayfaya erişmek için
     *
     * @return
     */
    public String toWelcome() {
        return "/secured/securedPage.xhtml";
    }

    public String toIndex() {
        return "/index.xhtml";
    }

    public String redirectToIndex() {
        return "/index.xhtml?faces-redirect=true";
    }

    public String toLogin() {
        return "/login.xhtml";
    }
}

Login Filter Class 

Bu classımıza öncelikle Filter sınıfını implement ettik filtreleme yapabilmek için.

doFilter () metodu içinde eğer kullanıcı login olmamış ise login olması sağlıyoruz ardından güvenli sayfaya erişmesini sağlıyoruz.


public class LoginFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
//        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
//        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        //Login sınıfımı çağırıyoruz
        Login login = (Login) ((HttpServletRequest) request).getSession().getAttribute("login");
        // Kullanıcı giriş yapıp yapmadığını kontrol ediyoruz
        if (login == null || !login.isLogeddIn()) {
            String path = ((HttpServletRequest) request).getContextPath();
            ((HttpServletResponse) response).sendRedirect(path + "/login.xhtml");
        }
        chain.doFilter(request, response);

    }

    @Override
    public void destroy() {
//        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

}


web.xml dosyamıza filter classımızı ekliyoruz
/secured* altındaki tüm sayfalar için gecerli olacaktır.








Hiç yorum yok:

Yorum Gönder

Lütfen yorumlarınızı iletiniz...