为了账号安全,请及时绑定邮箱和手机立即绑定

Spring Security 自定义登录页面协助

Spring Security 自定义登录页面协助

万千封印 2023-10-30 15:15:47
我一直在尝试正确配置此配置,但是我遇到了一些困难,我相信这是一个我没有看到的小修复。默认的 spring security 登录页面工作得很好,但我无法渲染自定义 html。它只是将获取映射“login”读取为字符串。任何帮助将不胜感激!1.安全配置@EnableWebSecuritypublic 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();
查看完整描述

3 回答

?
慕后森

TA贡献1802条经验 获得超5个赞

我相信只要你尝试一下就能解决这个问题。

authorizeRequests()
                .antMatchers("/admin").hasRole("ADMIN")
                .antMatchers("/user").hasAnyRole("ADMIN", "USER")
                .antMatchers("/").permitAll()
                .and()   
                .formLogin().loginPage("/login.html")
                .loginProcessingUrl("/login")
                .defaultSuccessUrl("/index.html",true);

另外,Spring security本身有映射url端点/login,如果你想改变它,那么方法loginProcessingUrl可以帮助改变登录路径


查看完整回答
反对 回复 2023-10-30
?
慕斯709654

TA贡献1840条经验 获得超5个赞

您的登录页面是 /login.html 而不是 /login


所以你的配置应该是:


.formLogin().loginPage("/login.html").permitAll()

.loginProcessingUrl("/login")

.defaultSuccessUrl("/index.html",true);

以及控制器中的 /login 映射。从 MainController 中删除它:


 @GetMapping("/login")

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

    }


查看完整回答
反对 回复 2023-10-30
?
蛊毒传说

TA贡献1895条经验 获得超3个赞

我想到了。我将此 ModelAndView 添加到我的主控制器类中并修复了它。不过还是谢谢你的建议。


    @RequestMapping("/login")

public ModelAndView login () {

    ModelAndView modelAndView = new ModelAndView();

    modelAndView.setViewName("login");

    return modelAndView;

}



查看完整回答
反对 回复 2023-10-30
  • 3 回答
  • 0 关注
  • 94 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信