Miért tölti be a CSS file tartalmát szövegként ha a bejelentkezés gombra kattintok?

0 értékelés
214 megtekintés
nemad (8 pont) kérdezte Már 13.
nemad szerkesztett Már 14.

Update:

A Spring Boot II. 17-es videójánál tartok, és egy olyan hibába botlottam, hogy amikor egy regisztrált felhasználóval be szeretnék jelentkezni, akkor ahelyett, hogy átirányítana az index oldalra a static/css/blog.css file tartalmát írja ki szövegesen.

Letöltöttem a videóhoz kapcsolód github repot is, csak a properties filet módosítottam a Heroku adatokkal, akkor működött. Viszont ahogy átírtam a pom.xml-t az alábbiakra:

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<parent>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<version>2.1.3.RELEASE</version>

<relativePath /> <!-- lookup parent from repository -->

</parent>

<groupId>hu.sec</groupId>

<artifactId>sec</artifactId>

<version>0.0.1-SNAPSHOT</version>

<name>Sec</name>

<description>sec</description>

<properties>

<java.version>11</java.version>

</properties>

<dependencies>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-security</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-test</artifactId>

<scope>test</scope>

</dependency>

<dependency>

<groupId>org.springframework.security</groupId>

<artifactId>spring-security-test</artifactId>

<scope>test</scope>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-thymeleaf</artifactId>

</dependency>

<dependency>

<groupId>nz.net.ultraq.thymeleaf</groupId>

<artifactId>thymeleaf-layout-dialect</artifactId>

</dependency>

<dependency>

<groupId>org.thymeleaf.extras</groupId>

<artifactId>thymeleaf-extras-springsecurity5</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-mail</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-data-jpa</artifactId>

</dependency>

<dependency>

<groupId>org.postgresql</groupId>

<artifactId>postgresql</artifactId>

<scope>runtime</scope>

</dependency>

</dependencies>

<build>

<plugins>

<plugin>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-maven-plugin</artifactId>

</plugin>

</plugins>

</build>

</project>

ismételten nem működik. Viszont ha kitörlöm a main.html fileból az alábbi sort:

<link rel="stylesheet" href="../static/css/blog.css" th:href="@{/css/blog.css}"/>

akkor működik. Nem értem, hogy a Bejelentkezés gomb megnyomása után, hogy kerülök a css fileomba. Ötlet?

2 Válasz

0 értékelés
thedorsan (42 pont) válaszolta meg Már 19.
Nekem akkor volt ilyen problémám mikor a nem megfelelő thymeleaf,spring verziót használtam. Én azzal javítottam ki hogy a videóban használt Spring verziót használtam, mivel az nekem jobban is feküdt. Próbáld meg átállítani.
0 értékelés
varvajk (4 pont) válaszolta meg Júl 28.
varvajk szerkesztett Júl 29.

Igaz én most csak a 11-es videónál járok, de ugyan ebbe ütköztem. Nem vagyok benne teljesen biztos, de amikor a SecurityConf-ban a configure metódusban beállítjuk authorizeRequests-eket, akkor ott tiltunk minden hozzáférést. Én hozzáadtam egy .antMatchers("/css/**").permitAll() sort, hogy a css mappa tartalmát el lehessen érni.

A 11-es videónak megfelelően a configure metódusom így néz ki:

protected void configure(HttpSecurity http) throws Exception {
  http
    .authorizeRequests()
      .antMatchers("/css/**").permitAll()
      .antMatchers("/admin/**").hasRole("ADMIN")
      .anyRequest().authenticated()
      .and()
    .formLogin()
      .loginPage("/login")
      .permitAll()
      .and()
    .logout()
      .logoutSuccessUrl("/login?logout")
      .permitAll();
}

Nekem így már megformázza a bejelentkező részt, és nem a blog.css-re irányít át bejelentkezés után. Lehet, hogy ez így Security Risk, de nálam így működött.

Szerk:
Ha az oldalon az összes css-t engedélyezzük (miért is ne, hiszen csak a formázásért felelősek), akkor a .antMatchers("/css/**").permitAll() sor helyett lehet haszálni a .regexMatchers(".*\\.css$").permitAll() sort.

Sztyopu Haladó Felhasználó (113 pont) szólt hozzá Szep 19.
Így tényleg működik! Bár biztosan van "okosabb" megoldás. Viszont szerintem túl nagy kockázat nincs, abban ha css permitAll(). Gondolom valamilyen bug lehet.
...