Usando Spring Security

Java

19/05/2011

Ao usar o Spring Security é necessário instalar o Spring? Ou posso somente utilizar esse pedaço do framework, adicionar os jars relativos a ele e pronto? Tenho uma pequena app sem o Spring, mas gostaria na parte de login usar o Spring Security. É possível?
Pjava

Pjava

Curtidas 0

Respostas

Anthony Accioly

Anthony Accioly

19/05/2011

Opa,
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,
GOSTEI 0
Davi Costa

Davi Costa

19/05/2011

Seguinte, o Spring Security é um framework excelente e de fácil configuração com qualquer projeto web.
Vc consegue usar esse framework, com struts, jsf, mesmo usando ejb para injeção de dependência.

Att Davi
GOSTEI 0
Davi Costa

Davi Costa

19/05/2011

Só compelementando, cara tem artigos muito bons inclusive com fontes para baixar para quem é assinante javaMagazine.
É uma mão na roda mesmo, inclusive nos fontes eles não usam Spring, só Spring Security.


Att Davi
GOSTEI 0
Anthony Accioly

Anthony Accioly

19/05/2011


 inclusive nos fontes eles não usam Spring, só Spring Security.

 
 

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?
GOSTEI 0
Davi Costa

Davi Costa

19/05/2011

Não sei se vc tem acesso a esse link:

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
GOSTEI 0
Anthony Accioly

Anthony Accioly

19/05/2011


 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.


 
 

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.
GOSTEI 0
Davi Costa

Davi Costa

19/05/2011

Cara, saiu uma versão nova a pouco tempo do Spring Security,
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
GOSTEI 0
Dyego Carmo

Dyego Carmo

19/05/2011

Com certeza voce acaba usando o spring por baixo dos panos ,

mas nao esquenta , no final voce *sempre* usa um monte coisa por baixo dos panos !

GOSTEI 0
POSTAR