24 Mart 2012 Cumartesi

Java Web Filter Ekleme

Günümüzde çoğu web uygulamaları giriş gerektiren uygulamalardır.
Böyle uygulamalarda ziyaretçiler sayfaya giriş yaptıktan sonra bazı özel sayfalara erişebiliyorlar.Örneğin kullanıcı profil sayfası.Kullanıcı sisteme giriş yaptıktan sonra profil sayfasına erişebilir ve erişmesi için bir linki oluşur.
Örnek verelim: "http://wwww.deneme.com/profil.htm"


Bu örnek linke kullanıcı uygulamaya giriş yapmışsa kendi profilini görüntüleyebilir aksi halde "Sayfa bulunamadı" ,"Erişim Engellendi" vb gibi sayfa uyarıları alır.

Peki bu kısıtlama web uygulamalarında nasıl sağlanır.Bunun cevabını aşağıda adım adım gerçekleştirelim.

Java geliştirme ortamının MyEclipse olarak ele aldım.(Eclipse'den hiç bir farkı yok)

Yeni bir Java web projesi açalım.Proje ismi Deneme olsun.Java Web uygulamalarında genellikle Web uygulama sunucusu olarak Apache Tomcat kullanılır ve portu 8080 olarak başlangıçta ayarlanmıştır.(İsteğe bağlı olarak portu değiştirilebilir.)

Proje detayına çok inmeyeceğim çünkü bu kısımda sadece Web url filtrelemeyi anlatacağım.

O zaman uygulamaya erişmek için "http://localhost:8080/Deneme" bu adresi girmemiz gerekir.

Tüm Java Web uygulamalarında standart olarak aşağıdaki klasörler bulunur.
src (Java kodu),WebRoot(Web dosyaları)

WebRoot altında da WEB-INF klasörüde her zaman bulunmaktadır.
Aynı zamanda da bu klasör altında da web.xml de her zaman bulunmaktadır.
Yani geliştirme ortamında web.xml görüntülemek için Deneme/WebContent/WEB-INF/web.xml bu dizine gidebilirsiniz.

Java Web uygulamalarında web.xml vazgeçilmezdir.Uygulama yöntemleri,kuralları,konfigürasyonlar vb burda işlenir.
Web filtreleme için de burayı kullanacağız.

Örnek web.xml içeriği
---------------------------------------------------------------------------------------------------


---------------------------------------------------------------------------------------------------




Şimdi bizim yapacağımız web.xml içeriğine filtreleme sağlamak için gerekli tanımı koyacağız.Son hali de aşağıdaki gibi olacak.

web.xml
---------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------


Yukarıdaki "" bölümünü kısaca anlatalım.

"filter-name" ===============> Filtreleme ismi.

"filter-class" ===========> Filtrelemeyi sağlayan java kodudur.Ve kod aşağıdaki gibidir.Yukarıda yazılan "filter.GirisFiltreleme" java class dizinidir.
---------------------------------------------------------------------------------------------------
package filter;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.StringTokenizer;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.log4j.Logger;

public class GirisFiltreleme implements Filter {

static Logger logger = Logger.getLogger(GirisFiltreleme.class.getName());

private Collection noFilterURIs = null;

private Collection initialURIs = null;

private String loginOccurredAttributeName = null;

private String loginPage = null;

protected FilterConfig filterConfig = null;


public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
this.loginOccurredAttributeName = filterConfig.getInitParameter("loginOccurredAttributeName");
this.loginPage = filterConfig.getInitParameter("loginPage");

StringTokenizer tokenizer = new StringTokenizer(filterConfig.getInitParameter("noFilterURIs"),filterConfig.getInitParameter("noFilterURISeperator"));
noFilterURIs = new ArrayList();
while (tokenizer.hasMoreTokens()) {
noFilterURIs.add(tokenizer.nextToken());
}
tokenizer = new StringTokenizer(filterConfig.getInitParameter("initialURIs"), filterConfig.getInitParameter("noFilterURISeperator"));
initialURIs = new ArrayList();
while (tokenizer.hasMoreTokens()) {
initialURIs.add(tokenizer.nextToken());
}
}


public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

HttpSession session = ((HttpServletRequest) request).getSession();

String loginOccurredAttribute = (String) session.getAttribute(loginOccurredAttributeName);

String requestURI = ((HttpServletRequest) request).getRequestURI();


if (logger.isDebugEnabled()) {
logger.debug("Path: " + requestURI);
}
// check the URL to see if request must be filtered
if (noFilterURIs.contains(requestURI)) {
if (logger.isDebugEnabled()) {
logger.debug("No filter required..");
}
// no filter required, go on
chain.doFilter(request, response);
}
// check if user has already signed in
else if (loginOccurredAttribute == null) {
if (logger.isDebugEnabled()) {
logger.debug("Filter applied.. No session exists, send to login page..");
}
// no! send the user to the login page
RequestDispatcher rd = filterConfig.getServletContext().getRequestDispatcher(loginPage);
rd.forward(request, response);
}
else {
if (logger.isDebugEnabled()) {
logger.debug("Filter applied.. Session exists, go on..");
}
chain.doFilter(request, response);
}
}

public void destroy() {
this.filterConfig = null;
}

}
---------------------------------------------------------------------------------------------------


"init-param" ==========> Filtrelemede uygulanacak kurallar parametrelerini tanımlar.

loginPage ------------------>Giriş yapılacak sayfayı tanımlar.
noFilterURIs---------------->Giriş gerektirmeyen sayfayı veya sayfaları gösterir.Örneğin iletisim.html
noFilterURISeperator-------->Adres kısmında kullanılacak ayraç sembölü
loginOccurredAttributeName-->Giriş yapan kullanıcılar, giriş kontrolü için otururum nesnesine(SESSION) bir tanım yapılması gerekir.Örneğin=USER_ID

Genel olarak toparlayacak olursak.
Uygulamaya giriş yapan kullanıcılar uygulama dizini altındaki sayfalara erişebilecekler.Örneğin http://localhost:8080/Deneme/Profil.html adresine girdiğinde kendisine ait profil bilgilerini görüntüleyebilecektir.
Ziyaretçiler ise adrese girdiğinde "Erişim engellendi","Sayfa bulunamadı" vb
gibi uyarılar alacaktır.Yukarıda iletisim sayfası için filtreleme engeli koymadık.
Yani http://localhost:8080/Deneme/iletisim.html sayfasına erişebilecekler.

Böylece Java Web uygulamalarında filtrelemeyi sağlamış olduk.


Umarım yararlı bilgi olur.İyi günler dilerim.

7 Mart 2012 Çarşamba

Oracle nasıl kaldırılır veya nasıl silinir.

Merhabalar.
İnsanların en çok sorun yaşadığı problemlerden bir tanesi Oracle yüklediği Bilgisayardan Oracle kaldırmamasıdır.
Aslında alışageldiğimiz mevcut yöntem yüklediğimiz programların Denetim Masasında Programlar Bölümünden Programı kaldırmaktır.Ama Oracle için bu durum söz konusu değildir.Son çıkan sürümlerde uninstaller paketi eklendiğini duydum.Ama biz aşağıdaki yöntemi kullanacağız.(Uninstaller öğrenene kadar).

Aşağıdaki adımları sırayla izleyelim.
1.ADIM
Başlat Tuşundan -Tüm Programlar-Donatıları-Çalıştır kısmını açıyoruz.
Gelen ekrana "services.msc" komutunu yazıp tamam tuşuna tıkladıktan sonra
hizmetler veya Servisler dediğimiz ekran açılacaktır.
Başında Oracle* yazılı tüm servislere aynı adım uygulanacak.
Servis üzerine sağ tıklayıp Durdur diyeceğiz.Bu servislerin isimlerini
bir notepad yazmanızda fayda var.Notepad ismini servisler olarak
kaydedebilirsiniz.Servis isimleri şu şekilde alınır.
Servis üzerine sağ tıklayıp Özelliklerden Hizmet Adı olan yerde yazılıdır.
Bu isimleri her servis servisler text dosyasına yazalım.

2.ADIM
Bu adım çok kolaydır.Oracle yüklü olan dizini tamamen sileceğiz.
(Genellikle varsayılan olarak C dizini altında app olarak kaydedilir.)

3.ADIM
Oracle yüklenirken Registera da yazar.
Register ulaşmak için Yukarıda anlatığımız Çalıştır kısmını açacağız.
"regedit" komutunu yazıp tamam tuşuna basıyoruz.
Açılan pencerede HKEY_LOCAL_MACHINE-->SOFTWARE-->Oracle siliyoruz.
4.ADIM
Şimdi tüm silmeleri hallettik.Ama tek bir şey kaldı.
1.adımda servisleri durdurduk ve servis isimlerini bir text dosyaya yazdık.
Bu servisleri de kaldırmamız gerekiyor.
Başlat tuşuna cmd yazıyoruz.(arama kısmına) cmd.exe bulunacaktır.Bu exe dosyasına
sağ tıklayıp yönetici olarak çalıştırıyoruz.
Gelen komut penceresine her servis için ayrı olarak aşağıdaki
komutu yazıyoruz ve enter (tamam) tuşuna basacağız.

sc delete servisAdı

servisAdı yazılan yere servis ismini yazıyoruz.Hatırlarsanız servis isimlerini
bir text dosyaya yazdık.Ordan kopyalayıp komuta yapıştırabiliriz.



Bu adımlardan sonra Bilgisayarınızdan oracle ile ilgili hiçbir şey kalmayacaktır.
Umarım yararlı bir bilgi olmuştur.

Başarılar dilerim.