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ма нещо не го подкарвам
с това ${session[T(blog.controllers.AccountController).USER_LOGIN]}
Демек в този случай ако е null линка за login се показва , може да се ползва и за Hello
Exception evaluating SpringEL expression: "session[T(blog.controllers.LoginController).USER_LOGIN]" (layout:60)
и така нещо не става