Archive for October, 2013

Spring Data Mongo ve Loglama

MongoDB Nedir?

MongoDB C++ dili ile yazılmış, ölçeklenebilir, doküman tabanlı, açık kaynak bir NoSQL veri tabanı uygulamasıdır.İlişkisel veri tabanı uygulamalarının yetersiz kaldığı durumlarda performansı ile öne çıkan NoSQL uygulamaları arasında sık kullanılan, güzel dokümante edilmiş bir veritabanıdır.

Spring Data Mongo nedir?

Spring Data Mongo Spring’in POJO tabanlı entitiy’lerinin mongo db collection ile etkileşimleri sağlar .Daha detaylı bilgi ve dökümatasyon için spring data mongo adresinden bakalabilirisiniz.

Gereksinimler:

Localinizde bir mongo db kurulu olması ve start edilmiş olması gerekiyor.

1. Uygun mongo db’yi bu adresten indirin. mongodb

2. D:\kurulum\mongodb gibi bir yere exract edin

mongodb_exract

3. Komut satrını yönetici modunda açıp “mdkdir d:\test\mongodb\data” klasörünü oluşturun. Ardından “c:\mongodb\bin mongod.exe –dbpath d:\test\mongodb\data komutunu çalıştırarak verilerin saklanacağı dizini belirtirin.

4.”c:\mongodb\ bin altındayken “mongo” yazıp test database’ine bağlanabilirsiniz
mongodb baglanma

Test dabase’ine bağlanma
test database

Spring projesinden Spring data mongo kullanma

Mongo db hazır olduğuna göre basit bir spring web projesi eclipse/STS’de oluşturulması gerekiyor.

1. Basit bir Spring projesi oluşturma

springproje

2. projenizin pom. xml’line log4j ve spring data mongo dependency’lerini eklemeniz gerekiyor.
pom

3. Properties dosyası oluşturma. File new > Other> log4j.properties

log4j

4 log4j dosyasına kodları kopyalayalım.

log4j.propterties
log4j.rootCategory=INFO, stdout

log4j.appender.stdout=org.springframework.data.document.mongodb.log4j.MongoLog4jAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] – %n
log4j.appender.stdout.host = localhost
log4j.appender.stdout.port = 27017
log4j.appender.stdout.database = logs
log4j.appender.stdout.collectionPattern = %X{year}%X{month}
log4j.appender.stdout.applicationId = my.application
log4j.appender.stdout.warnOrHigherWriteConcern = FSYNC_SAFE

log4j.category.org.apache.activemq=ERROR
log4j.category.org.springframework.batch=DEBUG
log4j.category.org.springframework.data.document.mongodb=DEBUG
log4j.category.org.springframework.transaction=INFO

log4j

package com.sezo;

public class Person {

private String id;
private String name;
private int age;

public Person(String name, int age) {
this.name = name;
this.age = age;
}

public String getId() {
return id;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}

@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}

App.java

package com.sezo;

import java.net.UnknownHostException;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;

import com.mongodb.Mongo;

public class App
{
private static final Log log = LogFactory.getLog(App.class);

public static void main( String[] args )
{
try {
MongoOperations mongoOps = new MongoTemplate(new Mongo(), “mydb”);
mongoOps.insert(new Person(“Ali”, 34));
log.info(mongoOps.findOne(new Query(Criteria.where(“name”).is(“Ali”)), Person.class));
// mongoOps.dropCollection(“person”);
}
catch(UnknownHostException ex) {
log.error(ex.getMessage());
}

5. Test etme

Eclipse Run/Debugdebug_sonuc

Mongo Db console’deb person colection’a erişme

console

Advertisements

Leave a comment

Filter ile Request ve Response loglama

LoggerFilter.java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.security.Principal;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;

import org.apache.commons.io.output.ByteArrayOutputStream;
import org.apache.commons.io.output.TeeOutputStream;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mock.web.DelegatingServletOutputStream;
import org.springframework.web.filter.GenericFilterBean;

import etiya.cloud.somemto.backend.api.services.Auditor;

public class LoggerFilter extends GenericFilterBean {

@Autowired
private Auditor auditor;

ByteArrayOutputStream baos = new ByteArrayOutputStream();

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

String URL = ((HttpServletRequest) request).getRequestURL().toString();
String URI = ((HttpServletRequest) request).getRequestURI().toString();
Principal usernamePrincipal = ((HttpServletRequest) request).getUserPrincipal();
String username="";
// usernamePrincipal kullanici adi gelmezse sessiondan

if(usernamePrincipal!=null){
username= usernamePrincipal.getName().toString();
}

BufferedReader in = new BufferedReader(new InputStreamReader(
request.getInputStream()));
String line = null;

StringBuilder requestBody = new StringBuilder();
while ((line = in.readLine()) != null) {
requestBody.append(line);
}

in.close();

HttpServletResponse responseWrapper = loggingResponseWrapper((HttpServletResponse) response);
filterChain.doFilter(request, responseWrapper);

String responseBody = baos.toString("UTF-8");

auditor.audit(URI, requestBody.toString(), responseBody,username);
}

private HttpServletResponse loggingResponseWrapper(
HttpServletResponse response) {
return new HttpServletResponseWrapper(response) {
@Override
public ServletOutputStream getOutputStream() throws IOException {
return new DelegatingServletOutputStream(new TeeOutputStream(
super.getOutputStream(), loggingOutputStream()));
}
};
}

private OutputStream loggingOutputStream() {
return baos;
}

}

Web.xml

/*

loggingFilter
etiya.cloud.somemto.backend.api.logger.LoggerFilter

LoggerFilter
org.springframework.web.filter.DelegatingFilterProxy

LoggerFilter
/*

*/

BeanContex
Filter’in bean olarak tanimlanmasi lazım. Dependcy injection calismasi için. Örnepi Auidit autowire edilmiş yukarıda.

Business Logic. Mongo Db’ye logları yazıyoruz.

public class AuditorImpl implements Auditor {

public void audit(String URI, String requestBody, String responseBody,
String username) {

System.out.println("URI:"+URI);
System.out.println("requestBody:"+requestBody);
System.out.println("responseBody:"+responseBody);

EntityLog entity= new EntityLog();
entity.setRequestBody(requestBody);
entity.setResponseBody(responseBody);
entity.setURI(URI);
entity.setUsername(username);

try {
MongoOperations mongoOps = new MongoTemplate(new Mongo(), "mydb");
mongoOps.insert(entity);
//System.out.println(mongoOps.findOne(new Query(Criteria.where("username").is("sezayir.dagtekin@hotmail.com")), EnttiyLog.class));
// mongoOps.dropCollection("entity");
}
catch(UnknownHostException ex) {
ex.getMessage();
}

}
}

, ,

Leave a comment

password encription


public class EncryptionUtility {

public static String encryptText(String text) {

MessageDigest digest;
byte[] hash = null;
try {
digest = MessageDigest.getInstance("SHA-256");
hash = digest.digest(text.getBytes());
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

return (byteArrayToHexString(hash));
}

public static String byteArrayToHexString(byte[] b) {
String result = "";
for (int i = 0; i < b.length; i++) {
result += Integer.toString((b[i] & 0xff) + 0x100, 16).substring(1);
}
return result;
}

}

, ,

Leave a comment