TTrack – Rejestracja/logowanie

r

Witam, środowisko skonfigurowane a więc pora brać się do roboty:) aby od czegoś zacząć postanowiłem pójść za dobrą radą i zacząć od początku:).                   

 

Rejestracja/logowanie.

 

Na pierwszy ogień poszła rejestracja usera w aplikacji, trochę o tym poczytałem i dowiedziałem się, że jest coś takiego jak spring security (z tego co się dowiedziałem mało jest rzeczy których spring nie dostarcza) nawet kompliator oparty na eclipsie ale narazie pozostane przy Intellij jakoś eclipse bardzo mi się muli na lubuntu i możliwe, że ze “Spring tool suite” będzie podobnie. Do moich celów wystarczy produkt od JetBrains:). Korzystająć z kilku tutoriali stworzyłem rejestrację oraz logowanie dla web usera lecz po kilku chwilach stwierdziłem, że stworzoną rejestrację wykorzystam do tworzenia nowych pracowników, natomiast web usera stworzę sobie narazie jednego a rejestrację umieszczę na liście ToDo:). Dodałem niezbędne elementy do mojego poma. Wygląda teraz tak jak widzisz jest już tego trochę. 

 

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.gert</groupId>
    <artifactId>TTrack</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <properties>
        <springframework.version>4.3.6.RELEASE</springframework.version>
        <springsecurity.version>4.0.4.RELEASE</springsecurity.version>
        <hibernate.version>4.3.11.Final</hibernate.version>
        <postgress.connector.version>9.1-901-1.jdbc4</postgress.connector.version>
    </properties>

    <dependencies>

        <!--Spring-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${springframework.version}</version>
        </dependency>

        <!-- Spring Security -->
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-web</artifactId>
            <version>${springsecurity.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-config</artifactId>
            <version>${springsecurity.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-taglibs</artifactId>
            <version>${springsecurity.version}</version>
        </dependency>

        <!--PostgreSQL-->
        <dependency>
            <groupId>postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>${postgress.connector.version}</version>
        </dependency>

        <!--Hibernate-->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>${hibernate.version}</version>
        </dependency>

        <!--Javax, JSTL-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-web-api</artifactId>
            <version>7.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

        <!--Other-->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.0</version>
        </dependency>
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>21.0</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.5</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>5.0.2.Final</version>
        </dependency>

    </dependencies>
    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.tomcat.maven</groupId>
                    <artifactId>tomcat7-maven-plugin</artifactId>
                    <version>2.2</version>
                    <configuration>
                        <path>/</path>
                        <contextReloadable>true</contextReloadable>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

</project>

Myślałem że będe miał jakieś problemy z połączeniem się z bazą danych ale wszystko poszło bardzo dobrze. Konfiguracja jaką wykorzystałem z bazą za pomocą hibernate’a wygląda następująco.

jdbc.driverClassName = org.postgresql.Driver
jdbc.url = jdbc:postgresql://localhost:5432/gert
jdbc.username = user
jdbc.password = password
hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
hibernate.show_sql = true
hibernate.format_sql = true

Tak to wygląda na javie.

package com.gert.config;

import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.hibernate4.HibernateTransactionManager;
import org.springframework.orm.hibernate4.LocalSessionFactoryBean;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import javax.sql.DataSource;
import java.util.Properties;



/**
 * Created by gert on 03.03.17.
 */
@Configuration
@EnableTransactionManagement
@ComponentScan({ "com.gert.config" })
@PropertySource(value = { "classpath:application.properties" })
public class HibernateConfiguration {

    @Autowired
    private Environment environment;

    @Bean
    public LocalSessionFactoryBean sessionFactory() {
        LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
        sessionFactory.setDataSource(dataSource());
        sessionFactory.setPackagesToScan(new String[] { "com.gert.model" });
        sessionFactory.setHibernateProperties(hibernateProperties());
        return sessionFactory;
    }

    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName(environment.getRequiredProperty("jdbc.driverClassName"));
        dataSource.setUrl(environment.getRequiredProperty("jdbc.url"));
        dataSource.setUsername(environment.getRequiredProperty("jdbc.username"));
        dataSource.setPassword(environment.getRequiredProperty("jdbc.password"));
        return dataSource;
    }

    private Properties hibernateProperties() {
        Properties properties = new Properties();
        properties.put("hibernate.dialect", environment.getRequiredProperty("hibernate.dialect"));
        properties.put("hibernate.show_sql", environment.getRequiredProperty("hibernate.show_sql"));
        properties.put("hibernate.format_sql", environment.getRequiredProperty("hibernate.format_sql"));
        return properties;
    }

    @Bean
    @Autowired
    public HibernateTransactionManager transactionManager(SessionFactory s) {
        HibernateTransactionManager txManager = new HibernateTransactionManager();
        txManager.setSessionFactory(s);
        return txManager;
    }
}

Na chwilę obecną najważniejsze tabele w bazie: user, employer i user_profile. Dla usera i employer’a trzymam zaszyfrowane hasło w jednym z pól. Stworzyłem sobie jednego super gościa którym loguje się do aplikacji:) gdzie wyświetlana jest lista pracowników oraz mogę zarejestrować nowych. Narazie jest to trochę zmodyfikowana ToDo app from tutorial’s:) ale jest to dobra podstawa do dalszych działań. Zastosowałem bootstrapa dzięki czemu aplikacja jako tako wygląda:) Zamierzam zastosować również OAuth2 do autoryzacji dla web usera. Na chwilę obecną tak wygląda logowanie do aplikacji.

Selection_026

Lista pracowników.

Selection_031

Rejestracja nowego pracownika.

Selection_028

Z technicznego punktu widzenia buduje aplikację według wzorca mvc czyli tworzę modele user czy employer, którymi zarządzam poprzez service użyty w kontrolerze, wykorzystałem również wzorzec DAO, więc na razie jest dobrze:) chociaż muszę przeprowadzić gruntowny refactoring:). Kod aplikacji dostępny jest na githubie.

Cześć:).

 

 

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *