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.
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.
/secured* altındaki tüm sayfalar için gecerli olacaktır.
Hiç yorum yok:
Yorum Gönder
Lütfen yorumlarınızı iletiniz...