Usando Spring Security
19/05/2011
0
Pjava
Posts
19/05/2011
Anthony Accioly
Link oficial da resposta à sua pergunta: http://www.acegisecurity.org/standalone.html.
Em miúdos, há uma certa amarração do Spring Security com o ApplicationContext do Spring, e desamarrar essa dependência é contra-produtiva (porém, pode ser feito). Uma solução possível, porém, é usar o Spring exclusivamente para configurar o Acegi e ignorar todas as suas outras funcionalidades.
Dessa forma, sim, você pode adicionar os jars, fazer uma configuração trivial do Spring e usá-lo exclusivamente para lidar com a parte de Segurança.
Abraços,
19/05/2011
Davi Costa
Vc consegue usar esse framework, com struts, jsf, mesmo usando ejb para injeção de dependência.
Att Davi
19/05/2011
Davi Costa
É uma mão na roda mesmo, inclusive nos fontes eles não usam Spring, só Spring Security.
Att Davi
19/05/2011
Anthony Accioly
Davi, só dando uma refraseada (corrija-me se eu estiver errado). Sem Spring significa com o jar do Spring e um arquivo de configuração básica, porém sem usar outras features do framework correto? Ou tem algum artigo aqui na JavaMagazine que está fazendo o que foi apontado no meu link acima para emular o ApplicationContext?
20/05/2011
Davi Costa
https://www.devmedia.com.br/websys.2/webreader.asp?cat=6&revista=javamagazine_69#a-1591
inclusive tem os fontes aqui da app bem legal mesmo.
caso não tenha acesso me avisa, que dou um jeito de te passar alguma app de exemplo.
Basicamente mantenho meu web.xml , mas lá aviso onde vai ficar o arquivo de configuração do security:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<!-- spring -->
<listener>
<description>Carrega o applicationContext.xml do spring na inicializacao</description>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-security-config.xml</param-value>
</context-param>
<!-- spring -->
<!-- spring-security -->
<filter>
<description>Filtro de seguranca implementando pelo Spring-Security</description>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- spring-security -->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
e nesse arquivo eu configuro da forma que eu quiser, usando base de dados ou não, abaixo segue um exemplo:
<?xml version="1.0" encoding="ISO-8859-1"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-2.0.2.xsd">
<http auto-config="true" access-denied-page="/accessDenied.jsp">
<intercept-url pattern="/usuarios/**" access="ROLE_USUARIO,ROLE_ADMIN" />
<intercept-url pattern="/admin/**" access="ROLE_ADMIN" />
<form-login login-page="/login.jsp"
authentication-failure-url="/login.jsp?login_error=true" default-target-url="/index.jsp" />
</http>
<authentication-provider user-service-ref="customUserService">
<password-encoder hash="md5" />
</authentication-provider>
<beans:bean id="customUserService" class="br.com.jm.security.CustomUserDetailsService">
<beans:property name="dataSource" ref="dataSource" />
<beans:property name="usersByUsernameQuery" value="select login as username, senha as password, ativo as enabled from usuario where login = ?" />
<beans:property name="authoritiesByUsernameQuery" value="select u.login as username, p.descricao as authority from usuario u join usuario_perfil up on u.login = up.login join perfil p on up.id_perfil = p.id_perfil where u.login = ?" />
</beans:bean>
<beans:bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<beans:property name="url" value="jdbc:hsqldb:hsql://localhost" />
<beans:property name="driverClassName" value="org.hsqldb.jdbcDriver" />
<beans:property name="username" value="sa" />
<beans:property name="password" value="" />
</beans:bean>
<beans:bean class="br.com.jm.security.IncorrectPasswordEventListener">
<beans:property name="dataSource" ref="dataSource" />
</beans:bean>
<beans:bean class="org.springframework.security.event.authorization.LoggerListener" />
<beans:bean class="org.springframework.security.event.authentication.LoggerListener" />
</beans:beans>
Mas vc tem razão ao falar que temos uma certa dependência do core do Spring.
O Spring Security depende de alguns dos JARs do Spring Framework “core”. Porém, não é necessário que sua aplicação seja construída com o modelo de programação do Spring Framework. Ou seja, uma aplicação pré-existente que não usa Spring pode passar a utilizar o Spring Security sem grandes modificações.
att Davi
20/05/2011
Anthony Accioly
O Spring Security depende de alguns dos JARs do Spring Framework
“core”. Porém, não é necessário que sua aplicação seja construída com o
modelo de programação do Spring Framework. Ou seja, uma aplicação pré-existente
que não usa Spring pode passar a utilizar o Spring Security sem grandes modificações.
Concordo. Warning, tópico avançado, e que a equipe da Acegi recomenda como contra-produtivo. O artigo lá em cima fala que dá para fazer uma espécie de Mock da classe ApplicationContext para remover dependências ao Core. Eu estou procurando como fazer isso para e amarrar o Spring Security diretamente ao Guice. Não carregar um segundo container IoC à toa seria uma justificativa plausível para o caso de uso (ou seja, fazer Mock da dependência do Core ou adaptá-lo para trabalhar com outro container IoC tipo Guice ou PicoContainer). O Spring Security é tão bom que vale o esforço para portá-lo se for necessário. Bom, quem sabe a Oracle não puxa umas idéias do Spring Security para uma próxima especificação do JAAS, ou até mesmo abre uma JSR à parte. Acho que isso viria a calhar para muita gente.
20/05/2011
Davi Costa
dá uma olhada para ver se os cars não pensaram nisso. Para ser honesto li um pouco só dessa versão nova, mas não sei se atende essa necessidade.
obg abcs
Att Davi
25/05/2011
Dyego Carmo
mas nao esquenta , no final voce *sempre* usa um monte coisa por baixo dos panos !
Clique aqui para fazer login e interagir na Comunidade :)