22 Haziran 2017 Perşembe

JAX-RS @Produces Anotasyonu

Giriş
Get metodu ile sonuç dönerken kullanılır. Şu satırları dahil ederiz.
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
String Kullanılması Hatası
Bu anotasyonu kullanırken Java'da tanımlı olan sabitler kullanılabilir veya metin olarak ta kullanılabilir. Metin olarak kullanım pek akıllıca değil çünkü yazım hatası olabiliyor.

Şu kod yanlış
@Produces("appplication/json")
Şöyle yaparız.
@Produces("application/json")
Örnek
Şöyle yaparız.
@GET
@Produces({MediaType.APPLICATION_JSON,MediaType.APPLICATION_XML})
public List<Party> getAllParties() throws Exception
{...}
Örnek
Şöyle yaparız
@Path("/example")
public class ExampleResource {

  @GET
  @Produces(MediaType.APPLICATION_JSON)
  public Example getExample() {
    ...
  }
}

20 Haziran 2017 Salı

Month Sınıfı

Giriş
Bu sınıf saat dilimi bilmez. Bu sınıf ile YearMonth Sınıfı benzeşiyorlar.

getDisplayName metodu
Şöyle yaparız.
String monthName = yearMonth.getMonth().
  getDisplayName(TextStyle.SHORT, Locale.ENGLISH);
Yılla beraber yazdırınca çıktı olarak şunu alırız.
Nov(2015)
Dec(2015)
Jan(2016)
Feb(2016)
Mar(2016)
Apr(2016)

18 Haziran 2017 Pazar

JavaFX FileChooser Sınıfı

constructor
Şöyle yaparız.
FileChooser fileChooser = new FileChooser();
getExtensionFilters metodu
Şöyle yaparız.
fileChooser.getExtensionFilters().
  add(new FileChooser.ExtensionFilter("PNG", "*.png"));
setTitle metodu
Şöyle yaparız.
fileChooser.setTitle("Open Resource File");
showOpenDialog metodu
Şöyle yaparız.
File file = fileChooser.showOpenDialog(null);


15 Haziran 2017 Perşembe

SSLSocket Sınıfı - İstemci Tarafında Kullanılır

Giriş
Açıklaması şöyle
SSLSocket is an extension of Socket that adds a layer of security protections over the underlying network transport protocol, such as TCP and UDP, and provides the benefits of SSL and TLS.
Kullanım
Örnek
Şöyle yaparız
String[] protocols = new String[]{"TLSv1.3"};
String[] cipher_suites = new String[]{"TLS_AES_128_GCM_SHA256"};

SSLSocket socket = null;
PrintWriter out = null;
BufferedReader in = null;
try {
  // Step : 1
  SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault();
  // Step : 2
  socket = (SSLSocket) factory.createSocket("google.com", 443);
  // Step : 3
  socket.setEnabledProtocols(protocols);
  socket.setEnabledCipherSuites(cipher_suites); 
  // Step : 4 {optional}
  socket.startHandshake(); 
  // Step : 5
  out = new PrintWriter(
    new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())));
  out.println("GET / HTTP/1.0");
  out.println();
  out.flush();
  if (out.checkError()) {
    System.out.println("SSLSocketClient:  java.io.PrintWriter error");
  }
            
  // Step : 6
  in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
 
  String inputLine;
  while ((inputLine = in.readLine()) != null) {
    System.out.println(inputLine);
  }
} catch (Exception e) {
  ...
} finally {
  if (socket != null) {socket.close();}
  if (out != null) {out.close();}
  if (in != null) {in.close();}
}
constructor - istemci
SSLSocketFactory sınıfının overload edilmiş createSocket metodlarından bir tanesi çağrılarak yaratılır. Şöyle yaparız.
SocketFactory sf = ...;
SSLSocket socket = (SSLSocket) sf.createSocket("gmail.com", 443);
constructor - sunucu
Şöyle yaparız.
SSLServerSocket sslServerSocket = ...;
SSLSocket sslSocket = (SSLSocket) sslServerSocket.accept();
close metodu
Şöyle yaparız.
socket.close();
getSession metodu
Şöyle yaparız.
SSLSession sslSession = socket.getSession();
setEnabledCipherSuites metodu
Açıklaması şöyle
You are enabling all the anonymous and low-grade cipher suites, so you are allowing the server not to send a certificate, so it doesn't send one, so it doesn't give you one in
Şöyle yaparız.
String cipherSuites[] ={
  "TLS_RSA_WITH_AES_128_CBC_SHA256"
  ,"TLS_RSA_WITH_AES_128_CBC_SHA"
  ,"TLS_RSA_WITH_AES_256_CBC_SHA"
  ,"TLS_RSA_WITH_AES_256_CBC_SHA256"              
  ...
}; 

socket.setEnabledCipherSuites(cipherSuites);
Şöyle yaparız.
sslSocket.setEnabledCipherSuites(sslSocket.getSupportedCipherSuites());
setEnabledProtocols metodu
Şöyle yaparız.
String tlsVersions[] = ...;
socket.setEnabledProtocols(tlsVersions);
startHandshake metodu
Şöyle yaparız.
sslSocket.startHandshake();


14 Haziran 2017 Çarşamba

Swing JPasswordField Sınıfı

Örnek
Şöyle yaparız.
new java.awt.Frame(){
  {
    add(new javax.swing.JPasswordField());
    setVisible(1>0);
  }
};

JarFile Sınıfı - Jar Dosyasını Okur

Giriş
Şu satırı dahil ederiz.
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
Jar dosyasını dolaşacaksak
1. entries()
2. stream()
metodları kullanılabilir. entries() metoduna Sonar hata veriyor, çünkü entries() metodu sadece Jar'ın başlık zarfını (header) okuyor. Bu da ZipBomb saldırısına imkan tanıyor. 

Doğru kod şöyle
File f = new File("ZipBomb.zip");
ZipFile zipFile = new ZipFile(f);
Enumeration<? extends ZipEntry> entries = zipFile.entries();

int THRESHOLD_ENTRIES = 10_000;
int totalEntryArchive = 0;

while(entries.hasMoreElements()) {
  ZipEntry ze = entries.nextElement();
  totalEntryArchive ++;
  if(totalEntryArchive > THRESHOLD_ENTRIES) {
    // too many entries in this archive, can lead to inodes exhaustion of the system
    break;
  } 
  ...
}
constructor - String
Şöyle yaparız.
String path = ...;
JarFile jar = new JarFile (path);
entries metodu
JarEntry nesnesi döner
Örnek
Şöyle yaparız.
Enumeration<JarEntry> entries = jar.entries();
Dönmek için şöyle yaparız.
while (entries.hasMoreElements()) {
  JarEntry entry = entries.nextElement();
  ...
}
getInputStream metodu
Şöyle yaparız.
JarEntry entry = ...;
InputStream is = jar.getInputStream (entry);
getManifest metodu
Manifest dosyasının okuyabilmeyi sağlar. 
Örnek
Şöyle yaparız.
JarFile jar = ...;
Manifest manifest = jar.getManifest();
Map<String, Attributes> map = manifest.getEntries();
Attributes a = map.get("classes.dex");
Örnek
Şöyle yaparız
String jarPath = ...;
String errorMessage;
String mainClassName;

try (JarFile jarFile = new JarFile(jarPath)) {
  Manifest manifest = jarFile.getManifest();
  if (manifest == null) {
    errorMessage = "No manifest file in " + jarPath;
    return;
  }
  Attributes mainAttributes = manifest.getMainAttributes();
  mainClassName = mainAttributes.getValue("Main-Class");
  if (mainClassName == null) {
    errorMessage = "No Main-Class found in the manifest of " + jarPath;
  }
}