<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Forum Pasja Informatyki - Najnowsze z tagiem jsessionid</title>
<link>https://forum.pasja-informatyki.pl/tag/jsessionid</link>
<description>Powered by Question2Answer</description>
<item>
<title>Spring Security - .defaultSuccesUrl</title>
<link>https://forum.pasja-informatyki.pl/506294/spring-security-defaultsuccesurl</link>
<description>

&lt;p&gt;Witam. Mam taki ot kod:&lt;/p&gt;



&lt;pre class=&quot;brush:java;&quot;&gt;
/*
 Author: Szyszka
 */

package pl.szyszka.login;

import javax.persistence.EntityManager;
import javax.persistence.Query;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.context.HttpSessionSecurityContextRepository;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import lombok.RequiredArgsConstructor;
import pl.szyszka.users.User;
import pl.szyszka.users.UserRepository;

@Controller
@RequestMapping(&quot;/login&quot;)
@RequiredArgsConstructor
public class LoginController {

       @Autowired
       DataSource dataSource;

       @Autowired
       AuthenticationManager authManager;

       PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();

       @Autowired
       private final UserRepository userRepository;

       @Autowired
       private final EntityManager entityManager;

       @GetMapping
       public String loginForm(Model model) {
              model.addAttribute(&quot;user&quot;, new User());
              return &quot;login&quot;;
       }

       @PostMapping
       public void login(User user, Model model, HttpServletRequest req, String redirect) throws Exception {
              Query query = entityManager.createNativeQuery(&quot;SELECT PASSWORD FROM USERS WHERE USERNAME = :username&quot;);
              Query isEnabled = entityManager.createNativeQuery(&quot;SELECT ENABLED FROM USERS WHERE USERNAME = :username&quot;)
                            .setParameter(&quot;username&quot;, user.getUsername());
              query.setParameter(&quot;username&quot;, user.getUsername());
              if (!user.getUsername().equals(&quot;&quot;)) {
                     if (userRepository.takeAllNames().toString().indexOf(user.getUsername()) == -1) {
                            model.addAttribute(&quot;loginResponse&quot;, &quot;Błędna nazwa użytkownika&quot;);
                     } else if (!passwordEncoder.matches(user.getPassword(), query.getSingleResult().toString())) {
                            model.addAttribute(&quot;loginResponse&quot;, &quot;Błędne hasło&quot;);
                     } else if (userRepository.takeAllNames().toString().indexOf(user.getUsername()) != -1
                                   &amp;amp;&amp;amp; passwordEncoder.matches(user.getPassword(), query.getSingleResult().toString())) {
                            if (isEnabled.getSingleResult().equals(true)) {
                                   UsernamePasswordAuthenticationToken authReq = new UsernamePasswordAuthenticationToken(
                                                 user.getUsername(), user.getPassword());
                                   Authentication auth = authManager.authenticate(authReq);

                                   SecurityContext sc = SecurityContextHolder.getContext();
                                   sc.setAuthentication(auth);
                                   HttpSession session = req.getSession();
                                   session.setAttribute(
                                                 HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY, sc);
                            } else {
                                   model.addAttribute(&quot;loginResponse&quot;,
                                                 &quot;Konto jest zarejestrowane, lecz nie zostało aktywowane. Odwiedź swoją skrzynke pocztową i aktywuj konto&quot;);
                            }
                     }
              } else {
                     model.addAttribute(&quot;loginResponse&quot;, &quot;Podaj nazwe użytkownika&quot;);
              }
       }
}&lt;/pre&gt;



&lt;p&gt;I rzeczywiście - sesja działa. Gdy zmienie typ na String i dodam do zwrocenia redirect:/home, to przekieruje mnie na strone /home, sesja jest, wszystko pięknie działa. Jednak czasem, zależnie od humorku Springa przekierowywuje mnie na: localhost:8080/home;jessionid=wartosc&lt;/p&gt;



&lt;p&gt;I wtedy wywala błąd. Dlatego pomyślałem, że zrobie w SecurityConfig coś takiego:&lt;/p&gt;



&lt;pre class=&quot;brush:java;&quot;&gt;
       @Override
       protected void configure(HttpSecurity httpSecurity) throws Exception {
              httpSecurity.csrf().ignoringAntMatchers(&quot;/register&quot;);
              httpSecurity.authorizeRequests().antMatchers(&quot;/home&quot;).hasRole(&quot;USER&quot;).and().formLogin()
                            .loginPage(&quot;/login&quot;).defaultSuccessUrl(&quot;/home&quot;);
       }&lt;/pre&gt;



&lt;p&gt;Jednak to sprawia, że po wpisaniu poprawnych danych nic się nie dzieje. Więc jest może jakiś sposób, żeby nie dodawało mi tego ;jsessionid=wartosc ? Z góry dzięki.&lt;/p&gt;</description>
<category>Java</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/506294/spring-security-defaultsuccesurl</guid>
<pubDate>Sun, 30 Aug 2020 08:35:17 +0000</pubDate>
</item>
</channel>
</rss>