0
votes

I'm using SpringMVC with Thymleaf and Spring-Security. I want to load a page using Thymleaf template and I can load my static resources.

I want to load for example a picture located in : static/img/theme/logo.png from template.html

Here is what I have : result


template.html :



       body>
            div layout:fragment="content">

                a href="">img src="../static/img/theme/logo.png" alt="Logo">

                h1>Hello

            /div>

        /body>


MvcConfig.java


 @Configuration
public class MvcConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/home").setViewName("home");
        registry.addViewController("/index").setViewName("index");
        registry.addViewController("/template").setViewName("template");
        registry.addViewController("/layout").setViewName("layout");
        registry.addViewController("/login").setViewName("login");

    }



    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }


}


WebSecurityConfig :


    @Configuration
    @EnableWebSecurity
    public class WebSecurityConfig extends WebSecurityConfigurerAdapter {


        //List of all free pages

        private static final String[] pagesFree = {
                "/home",
                "/template",
                "/layout",

                //Thymleaf directory
                "/css/**",
                "/js/**",
                "/img/**",
                "/fonts/**",
                "/ico/**",
                "/twitter/**",
                "/"
                };



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



            http
                .authorizeRequests()
                    .antMatchers(pagesFree).permitAll()
                    .anyRequest().authenticated()
                    .and()
                .formLogin()
                    .loginPage("/login")
                    .permitAll()
                    .and()
                .logout()
                    .permitAll();
        }

        @Autowired
        public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
            auth.inMemoryAuthentication()
                    .withUser("u").password("u").roles("USER");
        }


    }


Source Code tree

1

1 Answers

2
votes

In your security configuration you would declare something like this:

/** Public URLs. */
private static final String[] PUBLIC_MATCHERS = {
        "/webjars/**",
        "/css/**",
        "/js/**",
        "/images/**",
        "/"
};

Then something like this:

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

    List<String> activeProfiles = Arrays.asList(env.getActiveProfiles());
    if (activeProfiles.contains("dev")) {
        http.csrf().disable();
        http.headers().frameOptions().disable();
    }

    http
            .authorizeRequests()
            .antMatchers(PUBLIC_MATCHERS).permitAll()
            .anyRequest().authenticated()
            .and()
            .formLogin().loginPage("/login").defaultSuccessUrl("/payload")
            .failureUrl("/login?error").permitAll()
            .and()
            .logout().permitAll();
}

And in your Thymeleaf template you'd declare something like this:

<img class="featurette-image pull-left" th:src="@{/images/browser-icon-firefox.png}" />

A working copy of your project can be found here.