Post

Customizzare System.out.println

DOMANDA: E' possibile reindirizzare il System.out.println dallo Standard Output (quindi il video) ad un altro tipo di Output (ad esempio un file)? RISPOSTA: Per quanto insolito, è possibile. Guardiamo questo breve esempio autoeplicativo: package cambiooutput; import java.io.FileOutputStream; import java.io.PrintStream; public class ModificaOutput{    public static void main(String args[]) {              try {           System. setOut ( new PrintStream( new FileOutputStream( "C:/out.txt" )));           System.out.println( "Output reindirizzato!\r\nhttp://lancill.blogspot.it" );       } catch (Exception e) {           e.printStackTrace();       }    } } Attraverso il metodo setOut() dell'oggetto System , possiamo settare un output differente. In questo caso impostiamo come output un file chiamato out.txt . Tutte le successive chiamate System.out.println, scriveranno all'interno del file indicato anziché sull

Spring Security 3.1: StandardPasswordEncoder

Immagine
DOMANDA: Come posso criptare le password  con Spring Security 3.1 ? RISPOSTA: Per codificare le password in modo  sufficientemente sicuro , bisogna seguire i seguenti step: 1. utilizzare un codificatore hash che implementi un buon algoritmo 2. aggiungere il salt 3. concatenare una stringa randomica al salt.  Fortunatamente tutti questi fattori sono facilmente implementabili con Spring Security  utilizzando pochi step di configurazione. Nel nostro esempio utilizzeremo  la classe StandardPasswordEncoder .  Essa è in grado di codificare la password con l'algoritmo di hashing SHA-256  ed aggiungere, in automatico, un valore di salt randomico di 8 byte. Inoltre, passando una stringa al costruttore (nell'esempio di seguito: "123456"), Spring la concatenerà al salt generato rendendo più robusto il sistema di sicurezza.    Ecco quindi le righe da aggiungere al nostro file di configurazione spring-security.xml : <beans:bean id = "enco

Problemi con Eclipse: Access restriction

Immagine
DOMANDA: Ho provato ad importare un progetto nel mio workspace, ma ottengo questo errore in Eclipse: Access restriction: The type TerminalFactory is not accessible due to restriction on required library C:\Program Files\Java\jre6\lib\rt.jar Come posso risolverlo? RISPOSTA: Un errore di questo tipo rientra nel seguente errore generico: "Access restriction: ' NomeClasse ' is not accessible due to restriction on required library ' PathDellaLibreria '"; E' un messaggi di errore che può verificarsi mentre si sviluppano progetti Java all'interno dell'IDE Eclipse . Il messaggio è autoesplicativo, infatti ci avvisa di alcune classi che non vengono caricate nel progetto poiché sono state applicate delle restrizioni su di esse. Per rimuovere queste restrizioni dobbiamo modificare alcune opzioni sul progetto: click destro sul progetto -> Build Path -> Configure Build Path -> selezioniamo il tab Libraries Java Bu

Caricamento di icone

DOMANDA: Come posso caricare un'icona nella mia applicazione Java? RISPOSTA: Un modo semplice e rapido per caricare delle icone  in una finestra è questo qui di seguito. Questa classe serve principalmente per poter aggiungere icone alla nostra applicazione, ma talvolta l'oggetto ImageIcon viene usato per caricare immagini vere e proprie. package immagini; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; public class MioFrame extends JFrame {     private static final long serialVersionUID = 1L;       public MioFrame() {         this .setSize(600,600); // dimensioni del JFrame         JPanel panel = new JPanel();         ImageIcon icon = new ImageIcon( "C:/immagine.jpg" ); // immagine da caricare         JLabel label = new JLabel();         label.setIcon(icon);         panel.add(label);         this .getContentPane().ad

Problemi con Eclipse: FeatureNotFoundException

DOMANDA: Ogni volta che apro Eclipse ricevo uno strano errore sul mio progetto Spring Security: An internal error occurred during: "Loading descriptor for MySpringProject.". org.eclipse.emf.ecore.xmi. FeatureNotFoundException : Feature ' global-method-security ' not found. (platform:/resource/MySpringProject/WebContent/WEB-INF/ web.xml , 45, 57) RISPOSTA: La soluzione a questo problema è banalissima, ma in effetti di difficile individuazione proprio per la causa che l'ha scatenato: la disattenzione . Infatti basta individuare all'interno del file indicato dall'errore ( web.xml ), alla riga e colonna corrispondente (45, 57), il tag "intruso" <global-method-security> . In questo caso quel tag non va messo in quel file ma nel file security.xml di Spring Security . La soluzione indicata è valida per tutti i casi analoghi che scatenano una FeatureNotFoundException .

Hibernate e Tomcat out of memory

Immagine
DOMANDA: Sto utilizzando Hibernate sulla mia web application. Dopo un po' che navigo ed effettuo query, il server Tomcat 7 smette di funzionare e ricevo questo errore: java.lang.OutOfMemoryError: PermGen space         at java.lang.ClassLoader.defineClass1(Native Method)         at java.lang.ClassLoader.defineClass(ClassLoader.java:620)         at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124) Come posso risolverlo? RISPOSTA: L'accoppiata Tomcat e Hibernate funziona molto bene, ma, come tutti i  framework/applicazioni installati sul web server  richiede alcune piccole configurazioni per settare tutto al meglio. Come impostazione predefinita, Tomcat assegna pochissima memoria per i processi in esecuzione. E' proprio quello il problema, poca memoria a disposizione e il nostro framework (in questo caso Hibernate ) ne richiede di più. Vediamo come aumentarla. In Linux : 1. Cerchiamo il file catalina.sh nella carte

Stampa di immagini

DOMANDA: Come posso effettuare la stampa su carta di immagini utilizzando Java? RISPOSTA: Possiamo cambiare di poco il codice che abbiamo utilizzato in questo altro post ed essere in grado di stampare immagini su fogli di carta A4. package stampa; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.awt.print.PageFormat; import java.awt.print.Printable; import java.awt.print.PrinterException; import java.awt.print.PrinterJob; import java.io.File; import javax.imageio.ImageIO; public class Stampa implements Printable {     public Stampa() {          try {             PrinterJob pj = PrinterJob.getPrinterJob();             pj.setJobName( "TestStampa" );             pj.printDialog();             pj.setPrintable( this );             pj.print();         } catch (PrinterException e) {             e.printStackTrace();         }     }     public i