Loading...
valiobar avatar valiobar 29 Точки

Spring Login

От два дни се мъча с Login-a  на блога със Spring Security.

Ако някой го е преборил може ли малко насоки.

Изчетох къде що намерих и пак не го докарвам.Ако има и друг начин да се направи ще се радвам да го чуя.

Тагове:
kgyorev avatar kgyorev -10 Точки

Сега видях че си писал "със 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;
    }

 

 

 

0
28/08/2016 20:51:06
valiobar avatar valiobar 29 Точки

после как достъпваш usera в html-a  аз пробавх някоу неща с thymeleaf-a  aма нещо не го подкарвам

0
kgyorev avatar kgyorev -10 Точки
<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>

 

 

 

0
valiobar avatar valiobar 29 Точки

Exception evaluating SpringEL expression: "session[T(blog.controllers.LoginController).USER_LOGIN]" (layout:60)

 и така нещо не става 

0
kgyorev avatar kgyorev -10 Точки

Става,става нали при мен си работи.

Някъде грешиш, виж дали пътя ти е същия

при мен е 

blog.controllers.AccountController

при теб може да е друг.

 

И още в контролера трябва да имаш:

@Controller
public class AccountController {
    public static final String USER_LOGIN = "siteUserLogin";
    @Autowired
    private UserService userService;

    @Autowired
    private NotificationService notifyService;

    @Autowired
    private HttpSession httpSession;

 

-1
valiobar avatar valiobar 29 Точки

стана да 

трябвало да rebuild-na 

работи си да мерси 

остава и logouta  да измисля

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.