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:
<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
<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"/>
<!-- primeiro so admin, segundo qualquer autenticado, terceiro e quarto nao precisa de login -->
<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>
<!-- define o mecanismo de seguranca simples (estatico) com os usuarios: admin/admin e user/user -->
<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
...
<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):
<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:
<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:
<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/