我一直在尝试正确配置此配置,但是我遇到了一些困难,我相信这是一个我没有看到的小修复。默认的 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可以帮助改变登录路径
慕斯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");
}
蛊毒传说
TA贡献1895条经验 获得超3个赞
我想到了。我将此 ModelAndView 添加到我的主控制器类中并修复了它。不过还是谢谢你的建议。
@RequestMapping("/login")
public ModelAndView login () {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("login");
return modelAndView;
}
- 3 回答
- 0 关注
- 94 浏览
添加回答
举报
0/150
提交
取消