2017-06-29 1 views
0

Ich habe gesucht und gesucht und kann nichts finden. Ich arbeite an einem PoC für ein Corp-Projekt mit Spring Boot, Thymian Blatt, Feder Sicherheit.Spring Security benutzerdefinierte Login-Seite mit mehreren Thymleaf ViewResolvers

Wenn ich Login-Seite in Federsicherheits Config gesetzt wie

@Configuration 
@EnableWebSecurity 
public class SecurityConfiguration extends WebSecurityConfigurerAdapter { 

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

    http.authorizeRequests() 
      .antMatchers("/admin/**").hasAnyRole("ADMIN") 
      .antMatchers("/user/**").hasAnyRole("USER") 
      .anyRequest().authenticated() 
      .and() 
      .formLogin() 
      .loginPage ("/login") 
      .permitAll().defaultSuccessUrl ("/home") 
      .and() 
      .logout() 
      .permitAll(); 
} 

und in meiner Login-Seite (HTML) Ich gehe:

.... 
    <link rel="stylesheet" type="text/css" href="/styles.css" /> 
.... 

einfache CSS-Datei:

#test { 
     font-family: Arial, sans-serif; 
     padding-left: 1em; 
     background-color: /*[[${backgroundColor}]]*/ pink !important; 
    } 

ich log:

2017-06-28 21:50:29.436 INFO 24430 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet  : FrameworkServlet 'dispatcherServlet': initialization completed in 12 ms 
2017-06-28 21:50:29.436 DEBUG 24430 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet  : Servlet 'dispatcherServlet' configured successfully 
2017-06-28 21:50:29.476 DEBUG 24430 --- [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet  : DispatcherServlet with name 'dispatcherServlet' processing GET request for [/login] 
2017-06-28 21:50:29.477 DEBUG 24430 --- [nio-8080-exec-2] s.w.s.m.m.a.RequestMappingHandlerMapping : Looking up handler method for path /login 
2017-06-28 21:50:29.492 DEBUG 24430 --- [nio-8080-exec-2] s.w.s.m.m.a.RequestMappingHandlerMapping : Returning handler method [public java.lang.String sample.multimodule.generic.web.login.login(org.springframework.ui.Model)] 
2017-06-28 21:50:29.492 DEBUG 24430 --- [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet  : Last-Modified value for [/login] is: -1 
2017-06-28 21:50:29.505 DEBUG 24430 --- [nio-8080-exec-2] o.s.w.s.v.ContentNegotiatingViewResolver : Requested media types are [text/html, application/xhtml+xml, application/xml;q=0.9, */*;q=0.8] based on Accept header types and producible media types [*/*]) 
2017-06-28 21:50:29.509 DEBUG 24430 --- [nio-8080-exec-2] o.s.w.servlet.view.BeanNameViewResolver : Found matching bean for view name 'login' - to be ignored since it does not implement View 
2017-06-28 21:50:29.510 DEBUG 24430 --- [nio-8080-exec-2] o.s.w.s.v.ContentNegotiatingViewResolver : Returning [[email protected]] based on requested media type 'text/html' 
2017-06-28 21:50:29.511 DEBUG 24430 --- [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet  : Rendering view [org.thymeleaf.spring4.view.ThymeleafView[email protected]] in DispatcherServlet with name 'dispatcherServlet' 
2017-06-28 21:50:29.776 DEBUG 24430 --- [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet  : Successfully completed request 
2017-06-28 21:50:29.798 DEBUG 24430 --- [nio-8080-exec-4] o.s.web.servlet.DispatcherServlet  : DispatcherServlet with name 'dispatcherServlet' processing GET request for [/login] 
2017-06-28 21:50:29.798 DEBUG 24430 --- [nio-8080-exec-4] s.w.s.m.m.a.RequestMappingHandlerMapping : Looking up handler method for path /login 
2017-06-28 21:50:29.799 DEBUG 24430 --- [nio-8080-exec-4] s.w.s.m.m.a.RequestMappingHandlerMapping : Returning handler method [public java.lang.String sample.multimodule.generic.web.login.login(org.springframework.ui.Model)] 
2017-06-28 21:50:29.799 DEBUG 24430 --- [nio-8080-exec-4] o.s.web.servlet.DispatcherServlet  : Last-Modified value for [/login] is: -1 
2017-06-28 21:50:29.799 DEBUG 24430 --- [nio-8080-exec-4] o.s.w.s.v.ContentNegotiatingViewResolver : Requested media types are [text/css, */*;q=0.1] based on Accept header types and producible media types [*/*]) 
2017-06-28 21:50:29.800 DEBUG 24430 --- [nio-8080-exec-4] o.s.w.servlet.view.BeanNameViewResolver : Found matching bean for view name 'login' - to be ignored since it does not implement View 
2017-06-28 21:50:29.800 DEBUG 24430 --- [nio-8080-exec-4] o.s.w.servlet.view.BeanNameViewResolver : No matching bean found for view name 'login.css' 
2017-06-28 21:50:29.800 DEBUG 24430 --- [nio-8080-exec-4] o.s.w.s.v.ContentNegotiatingViewResolver : Returning [[email protected]] based on requested media type 'text/css' 
2017-06-28 21:50:29.800 DEBUG 24430 --- [nio-8080-exec-4] o.s.web.servlet.DispatcherServlet  : Rendering view [[email protected]] in DispatcherServlet with name 'dispatcherServlet' 
2017-06-28 21:50:29.819 ERROR 24430 --- [nio-8080-exec-4] org.thymeleaf.TemplateEngine    : [THYMELEAF][http-nio-8080-exec-4] Exception processing template "login [text/html]": An error happened during template parsing (template: "class path resource [templates/css/login]") 

org.thymeleaf.exceptions.TemplateInputException: An error happened during template parsing (template: "class path resource [templates/css/login]") 
    at org.thymeleaf.templateparser.text.AbstractTextTemplateParser.parse(AbstractTextTemplateParser.java:174) ~[thymeleaf-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
    at org.thymeleaf.templateparser.text.AbstractTextTemplateParser.parseStandalone(AbstractTextTemplateParser.java:92) ~[thymeleaf-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
    at org.thymeleaf.engine.TemplateManager.parseAndProcess(TemplateManager.java:666) ~[thymeleaf-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
    at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1098) [thymeleaf-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
    at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1072) [thymeleaf-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
    at org.thymeleaf.spring4.view.ThymeleafView.renderFragment(ThymeleafView.java:335) [thymeleaf-spring4-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
... 
... 

Ich habe ThymeleafConfig:

@Configuration 
@ConditionalOnClass({SpringTemplateEngine.class}) 
public class ThymeleafConfig extends WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter implements ApplicationContextAware { 

private ApplicationContext applicationContext; 
private static final String UTF8 = "UTF-8"; 


public void setApplicationContext(ApplicationContext applicationContext) { 
    this.applicationContext = applicationContext; 
} 


private TemplateEngine templateEngine(ITemplateResolver templateResolver) { 
    SpringTemplateEngine engine = new SpringTemplateEngine(); 
    engine.setTemplateResolver(templateResolver); 
    return engine; 
} 

@Bean 
public ViewResolver htmlViewResolver() { 
    ThymeleafViewResolver resolver = new ThymeleafViewResolver(); 
    resolver.setOrder (0); 
    resolver.setTemplateEngine(templateEngine(htmlTemplateResolver())); 
    resolver.setCharacterEncoding(UTF8); 
    resolver.setContentType("text/html"); 
    return resolver; 
} 


private ITemplateResolver htmlTemplateResolver() { 
    SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver(); 
    resolver.setOrder (0); 
    resolver.setApplicationContext(applicationContext); 
    resolver.setPrefix("classpath:/templates/"); 
    resolver.setSuffix(".html"); 
    resolver.setTemplateMode(TemplateMode.HTML); 
    resolver.setCacheable(false); 
    return resolver; 
} 

@Bean 
public ViewResolver cssViewResolver() { 
    ThymeleafViewResolver resolver = new ThymeleafViewResolver(); 
    resolver.setOrder (10); 
    resolver.setTemplateEngine(templateEngine(cssTemplateResolver())); 
    resolver.setCharacterEncoding(UTF8); 
    resolver.setContentType("text/css"); 
    return resolver; 
} 


private ITemplateResolver cssTemplateResolver() { 
    SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver(); 
    resolver.setOrder (10); 
    resolver.setApplicationContext(applicationContext); 
    resolver.setPrefix("classpath:/templates/css/"); 
    resolver.setSuffix(""); 
    resolver.setTemplateMode(TemplateMode.CSS); 
    resolver.setCacheable(false); 
    return resolver; 
} 



@Bean 
public ViewResolver jsViewResolver() { 
    ThymeleafViewResolver resolver = new ThymeleafViewResolver(); 
    resolver.setOrder (20); 
    resolver.setTemplateEngine(templateEngine(jsTemplateResolver())); 
    resolver.setCharacterEncoding(UTF8); 
    resolver.setContentType("application/javascript"); 
    return resolver; 
} 


private ITemplateResolver jsTemplateResolver() { 
    SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver(); 
    resolver.setOrder (20); 
    resolver.setApplicationContext(applicationContext); 
    resolver.setPrefix("classpath:/templates/js/"); 
    resolver.setSuffix(""); 
    resolver.setTemplateMode(TemplateMode.JAVASCRIPT); 
    resolver.setCacheable(false); 
    return resolver; 
} 

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

} 

Und ein Css Controller:

@Controller 
public class CssController { 

    @RequestMapping (value = "/styles.css") 
    public String mainStyles(Model model, HttpServletResponse response) { 
     model.addAttribute("backgroundColor", "blue"); 
     return "styles.css"; 
    } 

} 

Wenn ich entfernen

....formLogin().loginPage ("/home") 

von Security config und es in den Controller als normal zu bekommen, funktioniert es, und die Variablen werden wie erwartet in die CSS-Datei hinzugefügt.

Irgendwelche Ideen, warum ich dieses Problem bekomme, wenn ich mich in Spring Security anmelde/anmelde?

* beachten Sie das erste Mal Posting, also entschuldigen Sie sich, wenn im richtigen Format.

+0

Classpath Ressource [templates/css/login] => Ihre login.css Datei prüfen – kidnan1991

+0

i mit style.css zu analysieren login.html versuche innen Aber aus irgendeinem Grund. Wenn ich /styles.css innerhalb meiner login.html Seite habe, wenn ich durch Federsicherheit gerufen werde. es möchte meinen html viewResolver und meinen cssResolver durchlaufen. –

Antwort

0

Gefunden, wo das Problem war, war der Zugriff auf die Datei bei der Verwendung von Sicherheit nicht erlaubt.

benötigt folgende Sicherheits Config hinzuzufügen:

... 
.antMatchers ("/styles.css").permitAll() 
... 
Verwandte Themen