Spring + Jsf

5 respostas
M

opa.... primeira vez q to lidando com login... implementei um login com spring e ta tudo dance certo (ate agora), vamos a pergunta.... qndo eu faço login ele me rediciona para a pagina de index mas mesmo assim se eu não tiver feito o login eu consigo acessar as paginas e fazer manipulações no meu banco... gostaria de saber como faço pra bloquear as paginas.. fazer com que o usuario só acesse se tiver feito o login... alguem???

aplication context

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.0.xsd">
	<http auto-config="true" use-expressions="true">
		<intercept-url pattern="/index.jsf" access="hasRole('ROLE_USER')" />
		<form-login login-page="/login.jsf"
			authentication-failure-url="/login.jsf?erro=true" default-target-url="/index.jsf" />
	</http>

	<authentication-manager>
		<authentication-provider>
			<jdbc-user-service data-source-ref="dataSource"
				users-by-username-query="SELECT login, senha, 'true' as enable FROM funcionario WHERE login=?"
				authorities-by-username-query="SELECT login, authority FROM funcionario WHERE login=?" />
		</authentication-provider>
	</authentication-manager>

	<beans:bean id="dataSource"
		class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<beans:property name="url"
			value="jdbc:mysql://localhost:3306/wesley" />
		<beans:property name="driverClassName" value="com.mysql.jdbc.Driver" />
		<beans:property name="username" value="root" />
		<beans:property name="password" value="" />
	</beans:bean>

	
 
</beans:beans>

5 Respostas

finotti
N
michelorth_92:
opa.... primeira vez q to lidando com login... implementei um login com spring e ta tudo dance certo (ate agora), vamos a pergunta.... qndo eu faço login ele me rediciona para a pagina de index mas mesmo assim se eu não tiver feito o login eu consigo acessar as paginas e fazer manipulações no meu banco... gostaria de saber como faço pra bloquear as paginas.. fazer com que o usuario só acesse se tiver feito o login... alguem???

aplication context

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.0.xsd">
	<http auto-config="true" use-expressions="true">
		<intercept-url pattern="/index.jsf" access="hasRole('ROLE_USER')" />
		<form-login login-page="/login.jsf"
			authentication-failure-url="/login.jsf?erro=true" default-target-url="/index.jsf" />
	</http>

	<authentication-manager>
		<authentication-provider>
			<jdbc-user-service data-source-ref="dataSource"
				users-by-username-query="SELECT login, senha, 'true' as enable FROM funcionario WHERE login=?"
				authorities-by-username-query="SELECT login, authority FROM funcionario WHERE login=?" />
		</authentication-provider>
	</authentication-manager>

	<beans:bean id="dataSource"
		class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<beans:property name="url"
			value="jdbc:mysql://localhost:3306/wesley" />
		<beans:property name="driverClassName" value="com.mysql.jdbc.Driver" />
		<beans:property name="username" value="root" />
		<beans:property name="password" value="" />
	</beans:bean>

	
 
</beans:beans>

Cara pelo que eu vi no teu código é o seguinte...

Você falou que na tua página index só poderia ser acessada por um usuário do tipo role_user, mas em nenhum momente vc falou que as outras páginas da sua aplicação teriam que ser bloqueadas...

Esse código abaixo mostra como seria a maneira mais correta de fazer isso...
Repare que a página de login eu coloquei no access o "permitAll" isso quer dizer que todos os usuários poderão acessar a página de login..
Na minha aplicação eu tenho um pacote chamado de comAutenticacao, e dentro dele eu deixo todas as páginas que precisam ser autenticadas.....
ai como eu coloquei no access o "isAuthenticated()" que diz que todas as páginas que estão dentro desse pacote só serão acessadas se o usuário tiver autenticado...
Caso alguem tente acessar mudando a url que é o teu caso, ele não vai conseguir e será redirecionada para a página de login conforme foi definido na tag access-denied-page="/login.xhtml"......

<http auto-config="true" access-denied-page="/login.xhtml" use-expressions="true">   
        <form-login login-page="/login.xhtml" authentication-failure-url="/login.xhtml" 
         login-processing-url="/j_spring_security_check"
         default-target-url="/comAutenticacao/index.xhtml"/>
        <logout logout-success-url="/login.xhtml"/> 
        <intercept-url pattern="/login*" access="permitAll" />
        <intercept-url pattern="/comAutenticacao/**" access="isAuthenticated()" />
    </http>

Qualquer outra duvida só postar

Falow

M

narutor99 obrigado pela força… entao pelo que entendi eu posso criar uma pasta dentro de webContent e colocar todas as paginas lá dentro, ai eu faço o bloqueio pra todas aquelas paginas de dentro daquela pagina assim não preciso bloquear pagina por pagina? é isso?

vlw

N

michelorth_92:
narutor99 obrigado pela força… entao pelo que entendi eu posso criar uma pasta dentro de webContent e colocar todas as paginas lá dentro, ai eu faço o bloqueio pra todas aquelas paginas de dentro daquela pagina assim não preciso bloquear pagina por pagina? é isso?

vlw

Seria isso mesmo…
Você cria um pacote e coloca todas as suas páginas que vai precisar de autenticação dentro…
Dai vc não precisa fazer o bloqueio de página por página…

Vc pode também criar vário pacotes…
ex: administrador, user, financeiro…
e usar uma tag access="hasRole(‘ROLE_USER’) para cada um ex:

<intercept-url pattern="/administrador/**" access="hasRole('ROLE_ADMIN')" /> 
<intercept-url pattern="/user/**" access="hasRole('ROLE_USER')" /> 
<intercept-url pattern="/financeiro/**" access="hasRole('ROLE_FIN')" />

Caso vc querer me passa o teu email… que eu fiz o meu tcc na faculdade sobre o Spring Security, ai eu te mando ele…

Qualquer coisa só postar

M

o mano vlw passa sim… [email removido]

Criado 19 de dezembro de 2011
Ultima resposta 20 de dez. de 2011
Respostas 5
Participantes 3