Fiz um pequeno sistema Web utilizando JSF + Hibernate + Spring Security + GlassFish 3. Tudo está funcionando a contento. Faço o login, o Spring gerencia os acessos, tudo maravilha.
Coloco abaixo o applicationContext-security.xml:
<?xml version="1.0" encoding="UTF-8"?>
<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-3.0.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.1.xsd">
<http auto-config='true'>
<intercept-url pattern="/admin/**" access="ROLE_ADMINISTRADOR" />
<!--intercept-url pattern="/restrito/**" access="ROLE_USUARIO" /-->
<form-login login-page="/publico/login.jsf"
always-use-default-target="true"
default-target-url="/admin/lista_classes_por_professor.jsf"
authentication-failure-url="/publico/login.jsf?login_error=1" />
<logout/>
<remember-me />
</http>
<authentication-manager>
<authentication-provider>
<!--user-service>
<user name="jimi" password="jimispassword" authorities="ROLE_USER, ROLE_ADMINISTRADOR" />
<user name="bob" password="bobspassword" authorities="ROLE_USER" />
</user-service-->
<jdbc-user-service
data-source-ref="dataSource"
authorities-by-username-query="SELECT u.login, p.permissao
FROM usuario as u, usuario_permissao as p
where u.acesso = p.id
AND u.login = ?"
users-by-username-query="SELECT login, senha, ativo
FROM usuario
WHERE login = ?" />
</authentication-provider>
</authentication-manager>
</beans:beans>
Alguns dos dados deste sistema precisarão ser acessados via mobile, então eu comecei a criar um WebService no projeto (estou usando JAX-WS). Aí que cagou tudo…rsrsrs…pq eu não sei como faço para fazer o login no sistema pelo WebService…e se eu não logar não consigo acessar a camada de negócios para bater as queries no banco, pois tenho lá um Filter barrando tudo, só quem tem o ROLE_ADMIN consegue chegar lá…
Estou pesquisando há alguns dias antes de postar… Não encontrei um único tópico/ exemplo de uma aplicação onde poderia logar tanto via página web e webservice, também fui atrás de alguns livros e nada…peguei a documentação do Spring que é muito boa mas também não ajudou…
Algum dos distintos colegas do fórum poderiam, piedosamente me ajudar?
veja bem, se seu applicationContext-security.xml esta exatamente como vc descreveu, talvez seja por isso que vc tem acesso só como administrador pois, sua linha
de acesso como usuario esta comentada.
Então cara, o ponto é que estou tentando logar com credenciais de administrador…
A minha grande dificuldade encontra-se em configurar o WebService e o Spring…n estou conseguindo fazer isso…Vi na web alguma coisa usando um tal de UserDetails…mas n consegui entender…
Você faz alguma idéia de como eu configuro o WebService com o Spring sem comprometer o que já está funcionando?
Mais uma vez agradeço sua ajuda…já estava perdendo as esperanças…rsrsrs
Se o client que acessará o WS for também usando browser, você poderia tentar utilizando o basic authentication. Quando alguém tentar acessar o wsdl, será automaticamente requisitado as credenciais.
<jdbc-user-service
data-source-ref="dataSource"
authorities-by-username-query="SELECT u.login, p.permissao
FROM usuario as u, usuario_permissao as p
where u.acesso = p.id
AND u.login = ?"
users-by-username-query="SELECT login, senha, ativo
FROM usuario
WHERE login = ?" />
Como eu posso fazer para uma chamada de método do WebService login(user, senha) também seja autenticado pelo Spring…
Este código basta ou tenho que fazer mais alguma coisa?
Muito obrigado pelas ajudas…
Eu vou colocar meu web.xml aqui pra vcs darem uma olhada…
Bom! eu nunca fiz, apenas já li a respeito mais tente fazer a alteração abaixo!!!
<filter>
<filter-name>conexaoFilter</filter-name>
<filter-class>br.com.sistemaescola.filter.ConexaoHibernateFilter</filter-class>
</filter>
//esta linha libera a conexão para requisição JSF
<filter-mapping>
<filter-name>conexaoFilter</filter-name>
<url-pattern>*.jsf</url-pattern>
</filter-mapping>
// talvez falte essa que libera conexão para requisiçao de webservice, testa lá
<filter-mapping>
<filter-name>conexaoFiter</filter-name>
<url-pattern>/webservice/*</url-pattern>
</filter-mapping>
@author danielhenriquelima
*/ @WebService(serviceName = “IntegracaoMobile”)
public class IntegracaoMobile {
/**
This is a sample web service operation
*/ @WebMethod(operationName = “hello”)
public String hello(@WebParam(name = “name”) String txt) {
return “Hello " + txt + " !”;
}
/**
Web service operation
*/ @WebMethod(operationName = “login”)
public Usuario login(@WebParam(name = “usuario”) String usuario, @WebParam(name = “senha”) String senha) {
//TODO write your implementation code here:
UserDetailsServiceImpl userDetail = new UserDetailsServiceImpl();
obviamente as postagens são antigas, mas entendo a importância de mantê-las respondidas ou pelo menos com alguma referência para futuros usuários que encontrem-nas durante a busca de solução semelhante. Assim, compartilho minha busca por uma solução semelhante e algumas referências que encontrei.