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)
и така нещо не става
Става,става нали при мен си работи.
Някъде грешиш, виж дали пътя ти е същия
при мен е
при теб може да е друг.
И още в контролера трябва да имаш:
@Controller public class AccountController { public static final String USER_LOGIN = "siteUserLogin"; @Autowired private UserService userService; @Autowired private NotificationService notifyService; @Autowired private HttpSession httpSession;стана да
трябвало да rebuild-na
работи си да мерси
остава и logouta да измисля