Como aplicar/habilitar mecanismo de segurança em aplicativo desenvolvido com Spring Roo? Ou melhor, como usar
Spring Security com o
Spring Roo? Esse post responde essas perguntas.
A instalação e configuração do Spring Security é a mesma de um aplicativo que já usa
Spring Web MVC. MAS o pulo do gato é resolver isso através do shell do Spring Roo, com mais um comando esperto.
Comece
definindo a estrutura do aplicativo no Spring Roo, depois execute o comando:
_> security setup
Altere o arquivo applicationContext-security.xml indicando o padrão de url que aciona o mecanismo de segurança segurança, por exemplo:
1 | < intercept-url pattern = "/pastaProtegida/**" access = "isAuthenticated()" />
|
Pronto! É só empacotar [
perform package] e rodar a aplicação [
mvn tomcat:run]
.
Mas... o que o Roo faz por trás das cortinas?
- Primeiro configura a dependência do Spring Security (pom.xml);
- Depois cria um arquivo xml com as diretrizes de segurança: applicationContext-security.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | < http auto-config = "true" use-expressions = "true" >
< form-login
login-processing-url = "/resources/j_spring_security_check"
login-page = "/login"
authentication-failure-url = "/login?login_error=t" />
< logout logout-url = "/resources/j_spring_security_logout" />
< intercept-url pattern = "/admin/**" access = "hasRole('ROLE_ADMIN')" />
< intercept-url pattern = "/restrito/**" access = "isAuthenticated()" />
< intercept-url pattern = "/free/**" access = "permitAll" />
< intercept-url pattern = "/**" access = "permitAll" />
</ http >
< authentication-manager alias = "authenticationManager" >
< authentication-provider >
< password-encoder hash = "sha-256" />
< user-service >
< user name = "admin" password = "8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918" authorities = "ROLE_ADMIN" />
< user name = "user" password = "04f8996da763b7a969b1028ee3007569eaf3a635486ddab211d512c85b9df8fb" authorities = "ROLE_USER" />
</ user-service >
</ authentication-provider >
</ authentication-manager >
|
- Cria uma página com formulário de login:
Trecho de /WEB-INF/views/login.jspx
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | ...
< form action = "/static/resources/j_spring_security_check" method = "POST" >
< div >
< label for = "j_username" >
< spring:message code = "security_login_form_name" />
</ label >
< input id = "j_username" type = 'text' name = 'j_username' />
...
</ div >
< br />
< div >
< label for = "j_password" >
< spring:message code = "security_login_form_password" />
</ label >
< input id = "j_password" type = 'password' name = 'j_password' />
...
</ div >
...
</ form >
...
|
- Configura a página de login no arquivo view.xml (usado pelo Tiles):
1 2 3 | < definition extends = "public" name = "login" >
< put-attribute name = "body" value = "/WEB-INF/views/login.jspx" />
</ definition >
|
- Declara o filtro do Spring Security (springSecurityFilterChain) no web.xml:
1 2 3 4 5 6 | < filter >
< filter-name >springSecurityFilterChain</ filter-name >
< filter-class >
org.springframework.web.filter.DelegatingFilterProxy
</ filter-class >
</ filter >
|
- Configura a página de login no webmvc-config.xml:
1 | < mvc:view-controller path = "/login" />
|
Veja
mais sobre Spring Security.
Veja também mais
sobre Spring Roo no Globalcoders e
aqui no blog.
Spring Roo: Mais agilidade com qualidade!
http://twitter.com/edermag
http://www.yaw.com.br/