猿问

Spring Security 自定义登录页面协助

我一直在尝试正确配置此配置,但是我遇到了一些困难,我相信这是一个我没有看到的小修复。默认的 spring security 登录页面工作得很好,但我无法渲染自定义 html。它只是将获取映射“login”读取为字符串。任何帮助将不胜感激!


1.安全配置


@EnableWebSecurity

public class SecurityConfiguration extends WebSecurityConfigurerAdapter {


    @Autowired

    UserDetailsService myUserDetailsServices;

    @Override

    protected void configure(AuthenticationManagerBuilder auth) throws Exception {

        auth.userDetailsService(myUserDetailsServices);

    }


    @Override

    protected void configure(HttpSecurity http) throws Exception {

        http.csrf().disable().

        authorizeRequests()

                .antMatchers("/admin").hasRole("ADMIN")

                .antMatchers("/user").hasAnyRole("ADMIN", "USER")

                .antMatchers("/").permitAll()

                .and().formLogin()

                    .loginPage("/login")

                    .permitAll();

    }



    @Bean

    public PasswordEncoder getPasswordEncoder() {

        return NoOpPasswordEncoder.getInstance();

    }


}

3.主控制器


@RestController

@CrossOrigin(origins="http://localhost:4200")

public class MainController {


    private UserRepository userRepository;

    private UserDetailsService myUserDetailsServices;


    public MainController(UserRepository userRepository) {

        this.userRepository = userRepository;

    }


    @GetMapping("/")

    public String home() { return ("<h1>Welcome</h1>");

    }


    @GetMapping("/login")

    public String login() { return ("login");

    }


    @GetMapping("/user")

    public String user() {

        return ("<h1>Welcome User</h1>");

    }


    @GetMapping("/admin")

    public String admin() {

        return ("<h1>Welcome Admin</h1>");

    }


    @GetMapping("/all")

    public @ResponseBody Iterable<User> getAllUsers() {

        // This returns a JSON or XML with the users

        return userRepository.findAll();



万千封印
浏览 95回答 3
3回答

慕后森

我相信只要你尝试一下就能解决这个问题。authorizeRequests() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.antMatchers("/admin").hasRole("ADMIN") &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.antMatchers("/user").hasAnyRole("ADMIN",&nbsp;"USER") &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.antMatchers("/").permitAll() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.and()&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.formLogin().loginPage("/login.html") &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.loginProcessingUrl("/login") &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.defaultSuccessUrl("/index.html",true);另外,Spring security本身有映射url端点/login,如果你想改变它,那么方法loginProcessingUrl可以帮助改变登录路径

慕斯709654

您的登录页面是 /login.html 而不是 /login所以你的配置应该是:.formLogin().loginPage("/login.html").permitAll().loginProcessingUrl("/login").defaultSuccessUrl("/index.html",true);以及控制器中的 /login 映射。从 MainController 中删除它:&nbsp;@GetMapping("/login")&nbsp; &nbsp; public String login() { return ("login");&nbsp; &nbsp; }

蛊毒传说

我想到了。我将此 ModelAndView 添加到我的主控制器类中并修复了它。不过还是谢谢你的建议。&nbsp; &nbsp; @RequestMapping("/login")public ModelAndView login () {&nbsp; &nbsp; ModelAndView modelAndView = new ModelAndView();&nbsp; &nbsp; modelAndView.setViewName("login");&nbsp; &nbsp; return modelAndView;}
随时随地看视频慕课网APP

相关分类

Html5
我要回答