1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Autenticação customizada | Spring Security

Olá. Estive lendo vários tutoriais (muitos aqui do guj) sobre como criar login customizado com spring security, porém sem sucesso até o momento. Meu sistema de login está funcional mas de maneira básica. Gostaria de duas coisas: 1º SPRING UTILIZE MINHAS CONFIGURAÇÕES DE BANCO DE DADOS; e 2° LOGIN VIA MANAGED BEAN.

Segue meu applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?>
<b:beans xmlns="http://www.springframework.org/schema/security"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:b="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" access-denied-page="/login/acessoNegado.jsf"
        use-expressions="true">

        <intercept-url pattern="/adm/*" access="isAuthenticated()" />

        <logout logout-success-url="/login/login.jsf"
            invalidate-session="true" />

        <form-login login-page="/login/login.jsf"
            authentication-failure-url="/login/acessoNegado.jsf"
            default-target-url="/principal/principal.jsf" />
    </http>

    <authentication-manager>
        <authentication-provider>
            <password-encoder hash="md5" />
            <jdbc-user-service data-source-ref="dataSource"
                users-by-username-query="
                select u.username,u.password, u.enable, u.nomecompleto
                from tbl_usuario u where u.username=? and u.enable = 'true'"

                authorities-by-username-query="select u.username, au.name as authorities from tbl_usuario u, tbl_perfilacesso pa,
                tbl_autorizacao au
                where u.id = pa.usuario_id and pa.autorizacao_id = au.id and u.username =?" />

        </authentication-provider>
    </authentication-manager>

    <b:bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <b:property name="url"
            value="jdbc:postgresql://localhost:5432/banco" />
        <b:property name="driverClassName" value="org.postgresql.Driver" />
        <b:property name="username" value="root" />
        <b:property name="password" value="root" />
    </b:bean>

</b:beans>

E meu login.xhtml:

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:p="http://primefaces.org/ui">

<link rel="icon" href="../images/icon.png" type="image/ico" />

<h:head>
    <style type="text/css">
body {
    background-image: url(../images/fundo.jpg);
    background-repeat: no-repeat;
    background-attachment: fixed;
    background-position: center center;
    background-size: 100% 100%;
    overflow: hidden;
    width: 100%;
    height: 100%;
}

.ui-widget {
    font-size: 12px !important;
}

.semBorda tr,.semBorda td {
    border: none !important;
}
</style>
</h:head>

<h:body>

    <h:form id="login" prependId="false"
        onsubmit="action='#{request.contextPath}/j_spring_security_check';">
        <p:messages id="aviso" autoUpdate="true" />
        <div align="center" style="margin-top: 350; margin-bottom: 0">
            <p:panel header="Login"                
                style="align:center; margin-bottom: 90; width: 30%">

                <p:panelGrid columns="2" styleClass="semBorda" id="pndlogin">
                    <h:outputLabel value="Usuário:" />
                    <p:inputText id="j_username" size="15" required="true"
                        requiredMessage="Campo Login vazio" />

                    <h:outputLabel value="Senha:" />
                    <p:password id="j_password" size="15" required="true"
                        requiredMessage="Campo senha vazio" />
                </p:panelGrid>
                <br />
                <p:commandButton value="Logar" ajax="false" update="aviso" />
            </p:panel>
        </div>
    </h:form>

</h:body>
</html>

Como já disse, quero ajustar o applicationContext para realizar o login mediante uma classe managed bean e com as configurações de meu banco. Por padrão o spring só funciona com a table usuario com os campos username, password e enable e o controle de login é pela SQL users-by-username-query e authorities-by-username-query. Minha tabela usuário esta assim (id, login, senha), tbl_autorizacao (id,descricao) e perfil_acesso (id,autorizacao,usuario). Espero ter sido claro.

Agradeço antecipadamente, obrigado.

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

2 respostas

Não é a resposta que estava procurando? Procure outras perguntas com as tags spring-security java jsf ou faça a sua própria pergunta.