Ich benutze Frühling Sicherheit in meinem Projekt und ich benutze benutzerdefinierte Authontiere. Ich speichere Benutzer vom Code.Wie kann ich die Hauptseite öffnen, wenn der Benutzer angemeldet ist und versucht, die Anmeldeseite zu öffnen? (Spring security)
@Override
public void saveUser(AuthLkUser lkUser) {
final List<GrantedAuthority> grantedAuths = new ArrayList<>();
GrantedAuthority grantedAuthority = new SimpleGrantedAuthority("ROLE_USER");
grantedAuths.add(grantedAuthority);
UsernamePasswordAuthenticationToken result = new UsernamePasswordAuthenticationToken(lkUser.getMsisdn(), lkUser.getPricePlan(), grantedAuths);
SecurityContextHolder.getContext().setAuthentication(result);
}
Es funktioniert normal. Aber nach erfolgreicher Anmeldung kann ich die Anmeldeseite erneut öffnen. Ich muss deaktivieren Möglichkeit Login-Seite nach Succseessufull Login. Ich versuchte dies:
.antMatchers("/login", "/default/login").access("hasRole('ANONYMOUS')")
Aber Benutzer mit "USER" Rolle kann auch Login-Seite öffnen.
versuchte ich
@Component
public class MyAuthenticationSuccessHandler implements AuthenticationSuccessHandler {
@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication auth) throws IOException, ServletException {
// initialization logic after login
// redirect
HttpSession session = request.getSession();
SavedRequest savedReq = (SavedRequest) session.getAttribute("SAVED_REQUEST");
if (savedReq == null) {
response.sendRedirect(request.getContextPath() + "/landing");
}
else {
response.sendRedirect(savedReq.getRedirectUrl());
}
}
}
und Setup
@Autowired
private MyAuthenticationSuccessHandler myAuthenticationSuccessHandler;
.successHandler(myAuthenticationSuccessHandler)
Aber nach succsessufull Login diese Methode nicht aufgerufen config.
Wie kann ich die Hauptseite öffnen, wenn der Benutzer angemeldet ist und versucht, die Anmeldeseite zu öffnen?
und warum meine myAuthenticationSuccessHandler
nicht genannt?
es ist meine Config
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private MyAuthenticationSuccessHandler myAuthenticationSuccessHandler;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/", "/index").access("hasRole('USER')")
// .antMatchers("/login", "/default/login").access("hasRole('ANONYMOUS')")
.and()
.formLogin()
.loginPage("/login")
.loginProcessingUrl("/j_spring_security_check")
.successHandler(myAuthenticationSuccessHandler)
.permitAll();
http.csrf()
.disable()
.authorizeRequests()
.antMatchers("/resources/**", "/**").permitAll()
.anyRequest().permitAll()
.and();
}
}
das ist genau das, was ich tat. aber ich denke, es ist eine schlechte Übung – user5620472