Spring boot 我想先查看登录页面,即使任何用户想要访问任何其他页面,也需要在SpringSecurity中重定向到登录页面

Spring boot 我想先查看登录页面,即使任何用户想要访问任何其他页面,也需要在SpringSecurity中重定向到登录页面,spring-boot,spring-security,Spring Boot,Spring Security,这是示例控制器。我的问题基本上是当我输入基本url时,它会重定向到内部页面,而不是登录页面。我想要什么。我应该怎么做才能做到这一点 这是示例控制器。我的问题基本上是当我输入基本url时,它会重定向到内部页面,而不是登录页面。我想要什么。我应该怎么做才能做到这一点。 package com.sushovan.security.controller; import javax.validation.groups.ConvertGroup; import org.springframework.s

这是示例控制器。我的问题基本上是当我输入基本url时,它会重定向到内部页面,而不是登录页面。我想要什么。我应该怎么做才能做到这一点

这是示例控制器。我的问题基本上是当我输入基本url时,它会重定向到内部页面,而不是登录页面。我想要什么。我应该怎么做才能做到这一点。

package com.sushovan.security.controller;

import javax.validation.groups.ConvertGroup;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class HomeController {

    @RequestMapping("/")
    public String home() {
        return "home.jsp";
    }

    @RequestMapping("/login")
    public String loginPage() {
        return "login.jsp";
    }

    @RequestMapping("/logout-success")
    public String logoutPage() {
        return "logout.jsp";
    }
}
这是示例安全配置类。大部分配置都在这里完成


Spring安全过滤器算法是这样工作的; 网络资源是否受到保护? 用户是否经过身份验证? 用户是否已授权

所以,若它并没有经过身份验证,它会将请求重定向到登录页面,这就是您想要的

因此,您应该更新配置方法

    @Override
    protected void configure(HttpSecurity http) throws Exception {

        http.csrf().disable();
        http.authorizeRequests()
            .anyRequest().authenticated()
            .and()
            .formLogin()
            .loginPage("/login")
            .usernameParameter("userName").passwordParameter("password")
            .permitAll()
            .and()
            .logout().invalidateHttpSession(true)
            .clearAuthentication(true)
            .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
            .logoutSuccessUrl("/logout-success").permitAll();

    }

你能试试这个并告诉我它是否有效吗?

它有效。首先出现我的登录页面。但是我还需要做一件事,如果任何用户想要访问insider页面而不访问login,那么用户应该重定向到login页面。使用此配置,您可能无法在没有身份验证的情况下查看任何页面。当你第一次运行你的程序时,你能在没有身份验证的情况下访问任何页面吗?现在出现一个日志,说明userRepository无法注册。为什么会显示?如果我想公开我的一些页面,那么我需要做什么?如果你想公开页面,你需要添加这样的异常;antMatches(“/pageUrlYouWantToExpose”).permitAll()。。。您可以在这里使用通配符,例如,如果您匹配(“/name*”),它将应用于所有以“name”开头的url。如果您使用google Spring安全过滤器配置,您可以找到更多关于此的信息
    @Override
    protected void configure(HttpSecurity http) throws Exception {

        http.csrf().disable();
        http.authorizeRequests()
            .anyRequest().authenticated()
            .and()
            .formLogin()
            .loginPage("/login")
            .usernameParameter("userName").passwordParameter("password")
            .permitAll()
            .and()
            .logout().invalidateHttpSession(true)
            .clearAuthentication(true)
            .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
            .logoutSuccessUrl("/logout-success").permitAll();

    }