Pobieranie Danych z MySQL ( Spring Security + Hibernate)

0

Potrzebuje pomocy z pobraniem danych z DB Klientów.
Nie rozumiem w czym może być problem.
Z kodowaniem hasła ?

Podczas próby zalogowania wyskakuje "Błędne dane"

Czy mogę jakoś sprawdzić, czy cokolwiek jest w ogóle pobierane z bazy danych ?

Zaczynam przygodę ze Springiemi Hibernatem dopiero

Dzięki !

login.jsp


<html xmlns:th="https://www.thymeleaf.org">
<head th:include="layout :: head(title=~{::title},links=~{})">
    <title>Please Login</title>
</head>
<body th:include="layout :: body" th:with="content=~{::content}">
<div th:fragment="content">
    <form name="f" th:action="@{/login}" method="post">
        <fieldset>
            <legend>Please Login</legend>
            <div th:if="${param.error}" class="alert alert-error">
                Invalid username and password.
            </div>
            <div th:if="${param.logout}" class="alert alert-success">
                You have been logged out.
            </div>
            <label for="username">Username</label>
            <input type="text" id="username" name="username"/>
            <label for="password">Password</label>
            <input type="password" id="password" name="password"/>
            <div class="form-actions">
                <button type="submit" class="btn">Log in</button>
            </div>
        </fieldset>
    </form>
</div>
</body>

Klasa z Klientem


@Entity
@Table
public class Client {

    public Client()
    {

    }


    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String username;
    private String password;

    Client(Long id,String username,String passowrd)
    {
        this.id=id;
        this.username=username;
        this.password=passowrd;

    }

//Gettery i Settery

Klient Repository



public interface ClientRepository extends JpaRepository<Client, Long> {
    Client findByUsername(String username);


}



WebConfig

@Configuration
@EnableWebSecurity
public class AppSecurityConfig extends WebSecurityConfigurerAdapter {


    @Bean
    public BCryptPasswordEncoder bCryptPasswordEncoder()
    {
        return new BCryptPasswordEncoder();
    }


    @Bean
    public AuthenticationProvider authenticationProvider()
    {
        DaoAuthenticationProvider daoAuthenticationProvider = new DaoAuthenticationProvider();
        daoAuthenticationProvider.setUserDetailsService(userDetailsService());
        daoAuthenticationProvider.setPasswordEncoder(bCryptPasswordEncoder());
        return daoAuthenticationProvider;
    }



    @Override
    protected void configure(AuthenticationManagerBuilder auth)
            throws Exception {
        auth.inMemoryAuthentication()
                .withUser("spring")
                .password("secret")
                .roles("USER");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .csrf().disable()
                .authorizeRequests().antMatchers("/login").permitAll()
                .anyRequest().authenticated()
                .and()
                .formLogin()
                .loginPage("/login").permitAll()
                .and()
                .logout().invalidateHttpSession(true)
                .clearAuthentication(true)
                .logoutRequestMatcher(new AntPathRequestMatcher("/logout")).permitAll();
    }

}

Klient Principal


public class ClientPrincipal implements UserDetails {


    private Client client;

    public ClientPrincipal(Client client) {

        this.client = client;
    }


    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        return Collections.singleton(new SimpleGrantedAuthority("USER"));
    }

    @Override
    public String getPassword() {
        return client.getPassword();
    }

    @Override
    public String getUsername() {
        return client.getUsername();
    }

    @Override
    public boolean isAccountNonExpired() {
        return true;
    }

    @Override
    public boolean isAccountNonLocked() {
        return true;
    }

    @Override
    public boolean isCredentialsNonExpired() {
        return true;
    }

    @Override
    public boolean isEnabled() {
        return true;
    }
}

Klasa Implementująca UserDetailsService

@Service
public class MyUserDetailsService implements UserDetailsService {

    @Autowired
    private ClientRepository clientRepository;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        Client client = clientRepository.findByUsername(username);
        System.out.println("UserName" + username);
        System.out.println(client.toString());

        return new ClientPrincipal(client);
    }
}



@Controller
public class WelcomeController {


	@Autowired
	BCryptPasswordEncoder bCryptPasswordEncoder;

	@Autowired
	ClientRepository clientRepository;

	@RequestMapping("/")
	public String welcome(ModelMap map) {

		Client client = new Client();

//		client.setPassword(bCryptPasswordEncoder.encode("test3"));
//		client.setUserName("test3");
//		clientRepository.save(client);
		return "welcome.jsp";

	}

		@RequestMapping("/login")
				public String login()
		{
			return "login.jsp";
		}

	@RequestMapping("/logout")
	public String logout()
	{
		return "logout.jsp";
	}

	}


0
Helliot napisał(a):

Czy mogę jakoś sprawdzić, czy cokolwiek jest w ogóle pobierane z bazy danych ?

Zaczynam przygodę ze Springiemi Hibernatem dopiero

Tak, odpal projekt w trybie debugowania i postaw breakpoint w miejscu, gdzie są ściągane dane.

1
Helliot napisał(a):

Podczas próby zalogowania wyskakuje "Błędne dane"

Wstaw pełny stacktrace.

Helliot napisał(a):

Czy mogę jakoś sprawdzić, czy cokolwiek jest w ogóle pobierane z bazy danych ?
Zaczynam przygodę ze Springiemi Hibernatem dopiero

To, że zaczynasz dopiero przygodę z javą webową nie jest wymówką do braku umiejętności posługiwania się debuggerem.

Helliot napisał(a):

login.jsp

Porzuć myśli o nauce jsp.

Helliot napisał(a):
@Autowired
private ClientRepository clientRepository;

Poczytaj o wstrzykiwaniu zależności przez konstruktor.

1

Spring Security od wersji 5, wymaga domyślnie "passwordEncodera", dlatego hasło w "bazie danych", powinno być zakodowane.

 auth.inMemoryAuthentication()
                .withUser("spring")
                .password(passwordEncoder.encode("secret"))
                .roles("USER");

P.S. Używasz plików JSP, natomiast w plikach stosujesz Thymeleaf.

1 użytkowników online, w tym zalogowanych: 0, gości: 1