Spring Login
От два дни се мъча с Login-a на блога със Spring Security.
Ако някой го е преборил може ли малко насоки.
Изчетох къде що намерих и пак не го докарвам.Ако има и друг начин да се направи ще се радвам да го чуя.
От два дни се мъча с Login-a на блога със Spring Security.
Ако някой го е преборил може ли малко насоки.
Изчетох къде що намерих и пак не го докарвам.Ако има и друг начин да се направи ще се радвам да го чуя.
Сега видях че си писал "със Spring Security"
аз не успях със Spring Security да подкарам съобщенията, за информация и за грешките. Иначе успях да направя логването.
може да видиш тука един пример, може да свалиш и целия пример.
http://javapointers.com/tutorial/spring-custom-userdetailsservice-example/
Трябва да имаш още една таблица roles за да тръгне Spring Security.
Но като цяло ми се видя ми се много дървено и реших да си го направя по мой начин.
Може би е добър тул но от СофтУни не ни го обясниха а и имплиминтацията с информационните съобщения както казах нещо не ме се вижда да се имплементира със Spring Security.
Аз го направих с атрибут
в контролера AccountController:
@RequestMapping(value = "/users/login", method = RequestMethod.POST)
 public String loginPage(@Valid LoginForm loginForm, BindingResult bindingResult) throws SQLException {
     if (bindingResult.hasErrors()) {
         notifyService.addErrorMessage("Please fill the form correctly!");
         return "users/login";
     }
     if (!userService.authenticate(
             loginForm.getUsername(), loginForm.getPassword())) {
         notifyService.addErrorMessage("Invalid login!");
         httpSession.removeAttribute(USER_LOGIN);
         return "users/login";
     }
     notifyService.addInfoMessage("Login successful");
     httpSession.setAttribute(USER_LOGIN, loginForm.getUsername());
     return "redirect:/";
 }
 @RequestMapping(value = "/users/logout", method = RequestMethod.POST)
 public String logoutPage(@Valid LoginForm loginForm, BindingResult bindingResult) throws SQLException {
         httpSession.removeAttribute(USER_LOGIN);
         return "redirect:/";
 }
Демек ако имаш атрибут USER_LOGIN значи имаш логнат юзер
съответно този атрибут може да си го викаш във виютата.
тънкия момент е метода authenticate
той се имплементира в сервиза UserServiceJpaImpl:
@Override
public boolean authenticate(String username, String password) throws SQLException
{
    String query = "Select u.password_hash from users u where u.username = ?";
    PreparedStatement pstmt = dataSource.getConnection().prepareStatement(query);
    String hash = bCrypt(password);
    pstmt.setString(1, username);
    ResultSet resultSet = pstmt.executeQuery();
     if(resultSet.next()){
        String pass_db = resultSet.getString("password_hash");
        if(bCryptCheck(password,pass_db))
            return true;
        else
            return false;
    }
    else
       return false;
}
за връзка с базата трябва да имаш биин:
@Configuration
class AuthenticationProviderConfig {
    @Bean(name = "dataSource")
    public DriverManagerDataSource dataSource() {
        DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource();
        driverManagerDataSource.setDriverClassName("com.mysql.jdbc.Driver");
        driverManagerDataSource.setUrl("jdbc:mysql://localhost:3306/blog_db?characterEncoding=utf8");
        driverManagerDataSource.setUsername("root");
        driverManagerDataSource.setPassword("");
        return driverManagerDataSource;
    }
после как достъпваш usera в html-a аз пробавх някоу неща с thymeleaf-a aма нещо не го подкарвам
<a href="users/login.html" th:if="${session[T(blog.controllers.AccountController).USER_LOGIN]}==null" th:href="@{/users/login}">Login</a>с това ${session[T(blog.controllers.AccountController).USER_LOGIN]}
Демек в този случай ако е null линка за login се показва , може да се ползва и за Hello
<h1 th:if="${session[T(blog.controllers.AccountController).USER_LOGIN]}!=null" th:inline="text">Hello [[${session[T(blog.controllers.AccountController).USER_LOGIN]}]]!</h1>Exception evaluating SpringEL expression: "session[T(blog.controllers.LoginController).USER_LOGIN]" (layout:60)
и така нещо не става