Tagi Spring Security nie działają

Tagi Spring Security nie działają
Szymon Ciamaga
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 15
0

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

Kopiuj
	<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>
Kopiuj
<!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

Kopiuj
        <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>
Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0

Zdefiniuj "tagi nie działają".

Szymon Ciamaga
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 15
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ą

Kopiuj
sec:authorize="isAuthenticated()"

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

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
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?

Szymon Ciamaga
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 15
0

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

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
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...

S9
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 3573
0

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

Szymon Ciamaga
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 15
0

Mój viewResolver wygląda tak

Kopiuj
	@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;
	}
Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0

engine.setEnableSpringELCompiler(true);

Szymon Ciamaga
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 15
0

Hmm nie ma takiej metody w engine

TK
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 342
0

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

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

a pozniej:

Kopiuj
engine.addDialect(new SpringSecurityDialect());
jarekczek
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Siemianowice Śląskie
  • Postów: 500
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

J1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 224
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

Kopiuj
SpringTemplateEngine 

z pakietu

Kopiuj
spring-boot-starter-thymeleaf

nie posiada metody

Kopiuj
.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

Kopiuj
spring-boot-starter-thymeleaf

wymienić na

Kopiuj
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.