Tagi Spring Security nie działają

0

Witam chciałbym ukryć pewne elementy widoku za pomocą Spring Security niestety tagi nie działają

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-jpa</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jdbc</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-security</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-thymeleaf</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-configuration-processor</artifactId>
			<optional>true</optional>
		</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.security</groupId>
			<artifactId>spring-security-web</artifactId>
			<version>3.2.3.RELEASE</version>
		</dependency>

		<dependency>
			<groupId>org.springframework.security</groupId>
			<artifactId>spring-security-config</artifactId>
			<version>3.2.3.RELEASE</version>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-security</artifactId>
		</dependency>

		<dependency>
			<groupId>org.thymeleaf.extras</groupId>
			<artifactId>thymeleaf-extras-springsecurity4</artifactId>
			<version>3.0.2.RELEASE</version>
		</dependency>
		
	</dependencies>
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
      xmlns:th="http://www.thymeleaf.org"
      xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity4"
      xmlns="http://www.w3.org/1999/xhtml">

i chce ukryć np ten element

        <div style="color: aliceblue" sec:authorize="isAuthenticated()">
            Hello  <b sec:authentication="name"/> role
            <span sec:authentication="authorities"/>
             -
            <form th:action="@{/logout}" method="post"
                  style="display: inline-block">
                <input type="submit" value="Logout"/>
            </form>
        </div>
0

Zdefiniuj "tagi nie działają".

0
Shalom napisał(a):

Zdefiniuj "tagi nie działają".

Chce ukryć kilka elementów dla użytkowników, którzy nie są zalogowani za pomocą

sec:authorize="isAuthenticated()"

Ale nic się nie dzieje. Po uruchomieniu element, który powinien być niewidoczny dla anonimowego użytkownika jest dalej widoczny.

0

o_O no dobra ale co dalej? Czy te tagi sec są widoczne w kodzie strony czy nie? Czy dobrze skonfigurowałeś w ogóle access control? Mamy wróżyć z fusów?

0

Tagi są widoczne z poziomu przeglądarki a o acces controll to nie wiem co masz na myśli

0

Tagi są widoczne z poziomu przeglądarki to znaczy ze źle skonfigurowałeś view resolver, w szczególności nie ustawiłeś żeby evaluował wyrażenia EL-Expressions. Ale znów, wróżę tu teraz z kuli bo nie pokazałeś jak cokolwiek skonfigurowałeś. Zamiast tego bezużytecznego POMa mogłeś pokazać jakis uzyteczny fragment projektu...

0

I czemu korzystasz z XMLowej konfiguracji zamiast Javovej?
Edit:
coś mi się pomyliło :D

0

Mój viewResolver wygląda tak

	@Bean
	public ViewResolver viewResolver() {
		ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
		templateResolver.setTemplateMode("XHTML");
		templateResolver.setPrefix("views/");
		templateResolver.setSuffix(".html");

		SpringTemplateEngine engine = new SpringTemplateEngine();
		engine.setTemplateResolver(templateResolver);
		ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
		viewResolver.setTemplateEngine(engine);
		return viewResolver;
	}
0

engine.setEnableSpringELCompiler(true);

0

Hmm nie ma takiej metody w engine

0

Klasa SpringTemplateEngine powinna miec metode addDialect. Sprobuj przekazać do tej metody obiekt klasy org.thymeleaf.extras.springsecurity4.dialect.SpringSecurityDialect. Czyli:

import org.thymeleaf.extras.springsecurity4.dialect.SpringSecurityDialect; 

a pozniej:

engine.addDialect(new SpringSecurityDialect());
0

Już to raz było wklejane, z innego konta: Tagi Spring Security nie działają poprawnie "Tamta osoba" tak samo nie odróżniała tagów od atrybutów.

Piszesz tagi, a wcale tagów nie używasz, tylko atrybuty. Może skonfigurowałeś sobie projekt pod tagi, a pod atrybuty konfiguruje się inaczej. Spróbuj naprawdę używać tagów.

I ten Twój html jest błędny, nie ma czegoś takiego jak <b/> albo '`. Horror.

Nie mam żadnej wiedzy na temat Thyme, conieco wyczytałem tutaj: http://www.thymeleaf.org/doc/articles/springsecurity.html

0

"Tamta osoba" to tamta osoba i też nie odróżniała tagów od atrybutów. Odpowiedź @Shalom nie rozwiązała mojego problemu(ten sam problem, co ma autor tego wątku), ale nakierował mnie do jego rozwiązania.

Otóż tak jak autor napisał

Hmm nie ma takiej metody w engine

to prawda. Klasa

SpringTemplateEngine 

z pakietu

spring-boot-starter-thymeleaf

nie posiada metody

.setEnableSpringELCompiler(boolean)

Przez co model nie może być prawidłowo przetworzony na stronę .html. Jednak bez tej metody nie ma opcji prawidłowo wygenerować strony.

Dlatego należy pakiet

spring-boot-starter-thymeleaf

wymienić na

compile group: 'org.thymeleaf', name: 'thymeleaf', version: '3.0.7.RELEASE'
compile group: 'org.thymeleaf', name: 'thymeleaf-spring4', version: '3.0.7.RELEASE'
compile group: 'org.thymeleaf.extras', name: 'thymeleaf-extras-springsecurity4', version: '3.0.2.RELEASE'

(celowo nie ma tutaj pakietu z klasą SpringSecurityDialect)(wersja dla Gradle)

Dzięki tym pakietom możesz bez problemu dokonać konfiguracji.(jeśli chcesz)

Jednak ręczna konfiguracja nie jest wymagana. Wystarczy, że zamieścisz te 3 pakiety, a Spring Boot sam dokona konfiguracji i model będzie przetwarzał twoje atrybuty Spring Security.

1 użytkowników online, w tym zalogowanych: 0, gości: 1