Я пытаюсь запустить сеанс, используя компонент Vaadinsesse. В этом пользовательском интерфейсе я могу проверить сеанс (используя вход в систему проверки внутри кнопки) и кнопку «Выход». Хочу: < /strong>
Я хочу, чтобы сеанс запустился после того, как я введен свои учетные данные и нажимал кнопку входа в систему. И сеанс должен закончиться только в том случае, если я нажимаю кнопку «Выход» или в случае достижения тайм -аута сеанса (истечение сеанса).
TechStack используется:
- java 11
- vaadin 23.3.11
- 10. /> Spring 5.3.30
loginview.java
public LoginView() {
this.userRepository = SpringContext.getBean(UserRepository.class); // manual injection
TextField username = new TextField("Username");
PasswordField password = new PasswordField("Password");
Button loginButton = new Button("Login", e -> {
logger.info("Inside LoginView.class. Clicked login Button after entering username and password.");
String u = username.getValue();
String p = password.getValue();
logger.info("Username is: {}", u);
logger.info("Password is: {}", p);
if (userRepository.validateUser(u, p)) {
logger.info("Valid credentials");
VaadinSession.getCurrent().setAttribute("user", u);
String sessionId = VaadinSession.getCurrent().getSession().getId();
logger.info("Session Id is: {}", sessionId);
getUI().ifPresent(ui -> ui.navigate("dashboard"));
} else {
logger.info("Invalid credentials");
Notification.show("Invalid credentials");
}
});
add(username, password, loginButton);
}
< /code>
** dashboard.java ** < /p>
public Dashboard(){
logger.info("Entered Dashboard View.");
String user = (String) VaadinSession.getCurrent().getAttribute("user");
if (user == null) {
logger.info("Session missing or expired. Redirecting to login.");
UI.getCurrent().getPage().setLocation("login");
return;
}
VaadinSession session = VaadinSession.getCurrent();
String sessionId = session.getSession().getId();
logger.info("Session ID: {}", sessionId);
Button validateButton = new Button("Validate", e->{
logger.info("Clicked Validate button.");
String currentUserSessionId = VaadinSession.getCurrent().getSession().getId();
if(currentUserSessionId != null){
Notification.show("Session is valid " + currentUserSessionId);
}else{
Notification.show("No session found.");
}
});
Button logoutButton = new Button("Logout", e->{
logger.info("Clicked logout button.");
session.getSession().invalidate();
session.close();
getUI().ifPresent(ui -> ui.getPage().setLocation("login"));
});
add(validateButton, logoutButton);
}
sessionconfiglistener.java
public class SessionConfigListener implements HttpSessionListener {
private static final Logger logger = LoggerFactory.getLogger(SessionConfigListener.class);
@Override
public void sessionCreated(HttpSessionEvent se) {
se.getSession().setMaxInactiveInterval(30); // 30 seconds
logger.info("Session created: " + se.getSession().getId());
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
logger.info("Session expired: " + se.getSession().getId());
}
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... l-in-the-b