quarta-feira, 26 de dezembro de 2012

Acessando posições de lista JSTL

Vamos supor que você queira acessar uma posição específica da sua lista com JSTL, em casa posição da lista existe um objeto da classe Pessoa, que possui os seguintes atributos:

class Pessoa{
 private String id;
 private String nome;
 private String email;

 /*getters e setters*/
}

Vamos supor também que na sua jsp você queira acessar especificamente a primeira posição da lista, somente a primeira posição e você não quer utilizar um <c:forEach>. Como fazer isso sem iterar a lista ? Devo por no request o objeto na primeira posição da lista ? E se quiser um outro objeto da lista ? Devo settar no request também ?

A solução para isso é mais simples do que parece, vamos supor que você setou a lista request com o nome de lista. Na JSP, você deverá acessar a primeira posição desta forma:

${lista[0]}

Desta forma você terá acesso ao objeto da classe Pessoa, que está na primeira posição mas, se você quiser acessar o nome, ou o email ou o id ?

Para acessar o nome: ${lista[0]}.nome
Para acessar o email: ${lista[0]}.email
Para acessar o id: ${lista[0]}.id
Leia Mais ››

quarta-feira, 19 de dezembro de 2012

Configuração de SSL no Apache

Esse post é sobre como gerar os certificados SSL no CentOS utilizando o OpenSSL e ativá-los no Apache para permitir conexões criptogradas ao seu servidor Web, para isso precisamos inicialmente instalar os pacotes necessários (caso ainda não estejam instalados):

# yum install mod_ssl openssl

Agora iremos gerar a chave privada:

# openssl genrsa -out ca.key 1024

Gere o arquivo CSR:
# openssl req -new -key ca.key -out ca.csr

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:BR
State or Province Name (full name) [Berkshire]:Rio de Janeiro
Locality Name (eg, city) [Newbury]:Rio de Janeiro
Organization Name (eg, company) [My Company Ltd]:Exemplo
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your servers hostname) []:www.exemplo.com
Email Address []:admin@exemplo.com

Please enter the following extra attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

OBS.: Common Name deverá ser a URL do serviço, nesse exemplo www.exemplo.com.

Assine o arquivo CSR utilizando a chave privada para gerar o certificado:

# openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt

Mova os arquivos para a localização correta:

# mv ca.crt /etc/pki/tls/certs
# mv ca.key /etc/pki/tls/private/ca.key
# mv ca.csr /etc/pki/tls/private/ca.csr

Caso não utilize Virtual Host no seu servidor Apache, basta alterar as linhas abaixo no arquivo de configuração do SSL:

# vim /etc/httpd/conf.d/ssl.conf

SSLCertificateFile /etc/pki/tls/certs/ca.crt
SSLCertificateKeyFile /etc/pki/tls/private/ca.key

E reinicie o serviço:

# /etc/init.d/httpd restart

Caso utilize Virtual Host será necessário alterar o arquivo de configuração do Virtual Host ao invés do arquivo de configuração do SSL, abra o arquivo e adicione no início do arquivo:

# vim /etc/httpd/conf.d/meu_vhost.conf

NameVirtualHost *:443

E após a configuração do <VirtualHost *:80> adicione a entrada referente ao SSL:

# vim /etc/httpd/conf.d/meu_vhost.conf


SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/ca.crt
SSLCertificateKeyFile /etc/pki/tls/private/ca.key

AllowOverride All

DocumentRoot /var/www/vhosts/exemplo.com/htdocs
ServerName www.exemplo.com

Feito isso reinicie o serviço:

# /etc/init.d/httpd restart

Pronto! Basta acessar seu servidor ou Virtual Host pelo seu navegador/browser preferido utilizando https para verificar o certificado criado!
Leia Mais ››

segunda-feira, 17 de dezembro de 2012

Ferramentas para JSON

Galera, olá de novo, um dia tava precisando pegar uns dados que estavam vindo do servidor pra montar uma select, ai de primeira instância pensei em XML, só que isso me daria muito trabalho, pois precisaria de uma biblioteca java pra converter minha lista de objetos em um array xml sem ter grande trabalho. Então resolvi desistir porque não tava afim de xml, precisava de algo novo, ai pensei "porque não JSON ?"

Então, procurei um tutorial para aprender como é a estrutura do JSON e achei esse, que é muito bom.

http://www.devmedia.com.br/introducao-ao-formato-json/25275
 
Depois de ter aprendido a estrutura do JSON, começei a minha construção. Depois de construído minha string JSON ia para dentro de um método javascript e, precisava convertê-las em objetos javascript para assim conseguir trabalhar com mais facilidade. Mais um problema. Então pensei "como vou fazer isso?". Lembrei que existe um método do jquery que já faz isso pra mim sem problema algum e com a maior facilidade, esse método que é o método

$.parseJSON ou jQuery.parseJSON

documentação: http://api.jquery.com/jQuery.parseJSON/

Na transformação da string em codificação JSON, tomei alguns erros, logo precisava de alguma ferramenta web de conversão para ver qual era o problema e, achei duas muito boas:

http://json.parser.online.fr/

http://jsonviewer.stack.hu/

Outra referência muito boa de JSON:

http://www.json.org/

And always, have a nice day :D

Leia Mais ››

terça-feira, 11 de dezembro de 2012

Instalando e configurando o OpenLDAP

Tutorial aplicado em servidor CentOS 6.3 x64, para outras distribuições as configurações de apache e instalação de pacotes sofrerão mudanças.
1) Conceitos:

slapd: este é daemon isolado do LDAP. Ele escuta por conexões LDAP na porta 389 (636 para SSL)

2) Instalação
# yum install -y openldap-servers openldap-clients pam_ldap nss-pam-ldapd

3) Criar uma senha para o LDAP
# slappasswd
Anote essa senha em algum arquivo de texto. A senha é algo como {SSHA}LwxaxndI3HZUj29FYy2LFt/e3AlnUWzz.
Você precisará dela posteriormente.

4) Crie o arquivo ”/etc/openldap/slapd.conf”
# cd /etc/openldap
# vi slapd.conf

5) No arquivo slapd.conf, copiar e colar o seguinte texto. Atente-se aos campos em vermelho, fazendo as devidas alterações. Lembrando de alterar a senha no campo “rootpw” para a senha gerada anteriormente
database bdb
suffix "dc=empresa,dc=edu,dc=br"
rootdn "cn=Manager,dc=empresa,dc=edu,dc=br"
# Senhas em texto plano, especialmente para o rootdn, devem
# ser evitados. Veja slappasswd (8) e slapd.conf (5) para mais detalhes.
# Uso de autenticação forte incentivado.
rootpw digite_a_senha_gerada_aqui
directory /var/lib/ldap

6) Testar as configurações
# slaptest -u

7) Editar o arquivo “/etc/openldap/slapd.d/cn=config/olcDatabase={2}bdb.ldif“
# vi /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}bdb.ldif
Altere
olcSuffix: dc=my-domain,dc=com
para:
olcSuffix: dc=empresa,dc=edu,dc=br
Altere também:
olcRootDN: cn=Manager,dc=my-domain,dc=com
para:
olcRootDN: cn=Manager,dc=empresa,dc=edu,dc=br
Adicionar neste mesmo arquivo as linhas de comando a seguir:
olcRootPW: digite_a_senha_gerada_aqui
olcTLSCertificateFile: /etc/pki/tls/certs/slapdcert.pem
olcTLSCertificateKeyFile: /etc/pki/tls/certs/slapdkey.pem

8) Editar o arquivo “/etc/openldap/slapd.d/cn=config/olcDatabase={1}monitor.ldif“
# vi /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{1\}monitor.ldif
substitua:
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=externa
l,cn=auth" read by dn.base="cn=manager,dc=my-domain,dc=com" read by * none
por:
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=externa
 l,cn=auth" read by dn.base="cn=Manager,dc=empresa,dc=edu,dc=br" read by * none

9) Atualize as bases de dados
# updatedb

OBS: Para utilizar esse comando instale o mlocate, yum install mlocate -y

10) Atualize as permissões do diretório /var/lib/ldap/
# chown -R ldap:ldap /var/lib/ldap/

11) Crie o arquivo /var/lib/ldap/DB_CONFIG
# vi /var/lib/ldap/DB_CONFIG
E nele copie e cole o texto abaixo:
# $OpenLDAP: pkg/ldap/servers/slapd/DB_CONFIG,v 1.3.2.3 2007/08/31 23:13:57 quanah Exp $
# Example DB_CONFIG file for use with slapd(8) BDB/HDB databases.
#
# See Sleepycat Berkeley DB documentation
# for detail description of DB_CONFIG syntax and semantics.
#
# Hints can also be found in the OpenLDAP Software FAQ
# in particular:

# Note: most DB_CONFIG settings will take effect only upon rebuilding
# the DB environment.

# one 0.25 GB cache
set_cachesize 0 268435456 1

# Data Directory
#set_data_dir db

# Transaction Log settings
set_lg_regionmax 262144
set_lg_bsize 2097152
#set_lg_dir logs

# Note: special DB_CONFIG flags are no longer needed for "quick"
# slapadd(8) or slapindex(8) access (see their -q option).

12) habilitar TLS encryption
# vi /etc/sysconfig/ldap
Substitua
SLAPD_LDAPS=no
por
SLAPD_LDAPS=yes

13) Gerar os certificados de autenticação
# openssl req -new -x509 -nodes -out /etc/pki/tls/certs/slapdcert.pem -keyout /etc/pki/tls/certs/slapdkey.pem -days 365
A seguir lhe serão feitas algumas perguntas. Preencha os campos da seguinte forma:
Country Name (2 letter code) [XX]:br State or Province Name (full name) []:ce
Locality Name (eg, city) [Default City]:fortaleza
Organization Name (eg, company) [Default Company Ltd]:nome de sua empresa
Organizational Unit Name (eg, section) []:diretoria de ti
Common Name (eg, your name or your server's hostname) []:ti
Email Address []:seuemail@email.com.br

14) Mude as permissões do certificado
# chown -Rf root:ldap /etc/pki/tls/certs/$cert.pem; chmod -Rf 750 /etc/pki/tls/certs/$key.pem

15) testar as configurações
# slaptest -u

Deverá aparecer a mensagem “config file testing succeeded”
16) Iniciar o slapd
# /etc/init.d/slapd start

17) Verifique o status do servidor LDAP com o comando:
# /etc/init.d/slapd status

18) Criar o arquivo “base.ldif” dentro de “/etc/openldap”
# vi /etc/openldap/base.ldif

19) Copie e cole o seguinte texto:
dn: dc=empresa,dc=edu,dc=br dc: empresa
objectClass: top
objectClass: domain

dn: ou=People,dc=empresa,dc=edu,dc=br
ou: People
objectClass: top
objectClass: organizationalUnit

dn: ou=Group,dc=empresa,dc=edu,dc=br
ou: Group
objectClass: top
objectClass: organizationalUnit

20) Ao finalizar digite:
# ldapadd -x -W -D "cn=Manager,dc=empresa,dc=edu,dc=br" -f base.ldif
O comando pedirá a senha do LDAP para inserir os dados. Digite-a. A saída do comando deve ser:
adding new entry "dc=empresa,dc=edu,dc=br"
adding new entry "ou=People,dc=empresa,dc=edu,dc=br"
adding new entry "ou=Group,dc=empresa,dc=edu,dc=br"

21) digite o comando a seguir para ver como ficou!
# ldapsearch -x -b "dc=empresa,dc=edu,dc=br"

22) Criar o arquivo “groups.ldif” dentro de “/etc/openldap”
# vi /etc/openldap/groups.ldif
Insira o seguinte texto:
# criar o grupo group1 na Group

dn: cn=group1,ou=Group,dc=empresa,dc=edu,dc=br objectClass: posixGroup
objectClass: top
cn: group1
description: generic group 1
userPassword: digite_a_senha_gerada_aqui
gidNumber: 1001

# criar o grupo group2 na Group

dn: cn=group2,ou=Group,dc=empresa,dc=edu,dc=br objectClass: posixGroup
objectClass: top
cn: group2
description: generic group 2
userPassword: digite_a_senha_gerada_aqui
gidNumber: 4

23) Digite o comando:
# ldapadd -x -W -D "cn=Manager,dc=empresa,dc=edu,dc=br" -f groups.ldif
A saída do comando deve ser:
adding new entry "cn=ldapusers,ou=Group,dc=empresa,dc=edu,dc=br"
adding new entry "cn=ldapadm,ou=Group,dc=empresa,dc=edu,dc=br"
Obs: para excluir basta digitar:
# ldapdelete -x -W -D "cn=Manager,dc=empresa,dc=edu,dc=br"
"cn=group1,ou=Group,dc=empresa,dc=edu,dc=br"
# ldapdelete -x -W -D "cn=Manager,dc=empresa,dc=edu,dc=br"
"cn=group2,ou=Group,dc=empresa,dc=edu,dc=br"

24) Criar o arquivo “newpeople.ldif” dentro de “/etc/openldap”
# vi /etc/openldap/newpeople.ldif
Insira o seguinte texto:
dn: uid=group1,ou=Group,dc=empresa,dc=edu,dc=br
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
cn: ti
uid: ti
uidNumber: 3000
gidNumber: 1001
homeDirectory: /home/ti
loginShell: /bin/bash
gecos: Ti,Analista de Sistemas,Diretoria de TI,85-12345678
userPassword: digite_a_senha_gerada_aqui
shadowLastChange: 0
shadowMax: 0
shadowWarning: 0

25) digite o comando:
# ldapadd -x -W -D "cn=Manager,dc=empresa,dc=edu,dc=br" -f newpeople.ldif
A saída deve ser:
adding new entry "uid=blah,ou=People,dc=empresa,dc=edu,dc=br"

26) Buscas no ldap
# ldapsearch -x -b "dc=empresa,dc=edu,dc=br"
27) Instalando EPEL e PHPLDAPADMIN
# yum install -y php php-cli php-commom php-ldap
# yum --enablerepo=epel -y install phpldapadmin
# /etc/init.d/httpd restart

28) Configurar ldapadmin:

No arquivo /etc/httpd/conf.d/phpldapadmin.conf, adicione o range de ip ou lista de ip's com permissão de acesso a pagina de administração do ldap.

Alias /phpldapadmin /usr/share/phpldapadmin/htdocs
Alias /ldapadmin /usr/share/phpldapadmin/htdocs

<Directory /usr/share/phpldapadmin/htdocs>
  Order Deny,Allow
  Deny from all
  Allow from 127.0.0.1 10.0.0.0/24   # IP address you allow
  Allow from ::1
</Directory>

29) Liberar as portas 389 para o serviço slapd e 80 para o apache no iptables do servidor:

iptables -A INPUT -s 10.0.0.0/24 -p tcp -m state --state NEW -m tcp --dport 389 -j ACCEPT
iptables -A INPUT -s 10.0.0.0/24 -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT

30) Acesse o navegador e digite:
Leia Mais ››

segunda-feira, 10 de dezembro de 2012

Ireport corta texto

Mais uma vez desenvolvendo um relatório me deparei com um problemão, quando mandava uma string muito grande para ser exibida no report, a string vinha cortada, o texto não vinha completo. Pesquisando que nem um doido, descobri que isso era causado pela fonte que estava usando e pelo fato de uma propriedade não estar marcada.

A configuração de fonte que estava usando era: Tahoma - 8pt no report e no pdf era Sans-Serif - 8pt e isso era parte do problema. Para que funcionasse perfeitamente a exibição dos dados, tinha de mudar a fonte do report para Arial. Existe uma compatibilidade entre fontes por causa do espaçamento delas.

Um outro ponto que foi chave na solução do problema, foi marcar a seguinte propriedade:

"net.sf.jasperreports.print.keep.full.text

Property used to determine whether the fill process must preserve the original text for text elements that are not able to fit their entire contents. When this property is set, the engine saves the original text in the JRPrintText print text object, along with the index at which the text is to be truncated by the print object."


Essa propriedade está disponibilizada quando você dá um duplo clique em cima de seu parâmetro, field ou variável que representa a string. Existe um espaço para propriedades especiais que nem essa, clique no botão "Edit parameter properties" ou "Edit field properties, uma janela abrirá e nela você verá uma lista de propriedade e dois campos. Clique na propriedade descrita acima, automaticamente o primeiro campo será preenchido e no segundo campo informe que o valor dela será true.

Pronto, isso soluciona o problema. Espero ter ajudado.

http://www.guj.com.br/java/129174-jasper--ireport-cortando-texto
Leia Mais ››