【问题标题】:Mapping error Thymeleaf Spring Boot Security app, doesn't load templateS映射错误 Thymeleaf Spring Boot Security 应用程序,不加载模板
【发布时间】:2021-03-03 02:37:27
【问题描述】:

这是我第一次在这里问,我很关心这个,所以我使用Spring Securirty和Spring boot开发了一个Web应用程序,代码似乎很好并且应用程序运行,我只配置了登录,会话和注册页面,当我转到根 url localhost:8080/ 时,索引模板正确加载,但是当我转到其他 url 例如 /login 或 /register 时,我的模板不会显示,如果我更改主 url 的模板( localhost:8080/) 并返回除 index 以外的它一直返回 index,总而言之,Web 仅加载模板文件夹下名为 index.html 的文件。 这是我的文件结构: hirearchy

控制器类

@Controller
public class UserController {
    
    @Autowired
    private UserService userService;

    @Autowired
    private SecurityService securityService;

    @Autowired
    private UserValidator userValidator;
    
    @GetMapping("/register")
    public String registration(Model model) {
        model.addAttribute("userForm", new User());

        return "register";
    }
    
    @PostMapping("/register")
    public String registration(@ModelAttribute("userForm") User userForm, BindingResult bindingResult) {
        userValidator.validate(userForm, bindingResult);

        if (bindingResult.hasErrors()) {
            return "register";
        }

        userService.save(userForm);

        securityService.autoLogin(userForm.getEmail(), userForm.getPass());

        return "redirect:/main";
    }
    
    @GetMapping("/login")
    public String login(Model model, String error, String logout) {
        if (error != null)
            model.addAttribute("error", "Your username and password is invalid.");

        if (logout != null)
            model.addAttribute("message", "You have been logged out successfully.");

        return "login";
    }
    
    @GetMapping({"/"})
    public String welcome(Model model) {
        return "index";
    }
    
    @GetMapping({"/main"})
    public String main(Model model) {
        return "main";
    }
}

网络安全配置

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter{

    
    @Autowired
    private UserDetailsService userDetailsService;

    @Bean
    public BCryptPasswordEncoder bCryptPasswordEncoder() {
        return new BCryptPasswordEncoder();
    }
    
    @Bean
    public UserDetailsService userDetailsService() {
        return super.userDetailsService();
    }
    
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/",
                        "/register",
                        "/js/**",
                        "/css/**",
                        "/img/**",
                        "/webjars/**",
                        "/h2/**").permitAll()
                .anyRequest().authenticated()
                .and()
            .formLogin()
                .loginPage("/login")
                .permitAll()
                .and()
            .logout()
                .permitAll();

    }

    @Bean
    public AuthenticationManager customAuthenticationManager() throws Exception {
        return authenticationManager();
    }

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService).passwordEncoder(bCryptPasswordEncoder());
    }
}

应用类

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

【问题讨论】:

  • 您实际上不需要编辑标题来添加“(已解决)”。这里的很多问题已经解决了,我们可以通过问题答案计数上的深绿色看到。

标签: java spring spring-boot spring-security thymeleaf


【解决方案1】:

所以我设法解决了这个问题,这是包层次结构和资源加载失败,spring 应用程序加载了它类下的所有内容和每个包,我的应用程序包(以及其中的应用程序类)不是根目录,也是低于控制器一。 这是它必须遵循的结构:

  • 根包
    • SpringApp.java
    • WebConfig.java
    • 控制器包
      • MainController.java

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2015-09-14
    • 2015-04-26
    • 2018-07-08
    • 2020-03-30
    • 1970-01-01
    • 2016-01-26
    相关资源
    最近更新 更多