Sec:授权在spring security 4中不起作用

时间:2018-05-21 15:00:44

标签: spring-boot thymeleaf

我正在尝试使用spring security。我在内存管理员和用户中创建了两个用户。

auth.inMemoryAuthentication().withUser("admin").password("admin").roles("ADMIN");
        auth.inMemoryAuthentication().withUser("user").password("user").roles("USER");

这是我的pom.xml:

<dependency>
        <groupId>org.thymeleaf.extras</groupId>
        <artifactId>thymeleaf-extras-springsecurity4</artifactId>
    </dependency>

这是我的html页面:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" 
xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity4">
<head>
<meta charset="UTF-8">
<title></title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<link rel="stylesheet" type="text/css" href="css/myStyle.css"/>
<script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular-route.js"></script>
<script type="text/javascript" src="js/myApp.js"></script>
<link rel="stylesheet" href="css/print.css" type="text/css" media="print" />
</head>
<body ng-app="myStockApp">
<div ng-controller="mainctr">
<div data-ng-init="listArticles()"> 

<div sec:authorize="hasRole('ROLE_ADMIN')">Only for admin</div>

//code ...

我希望只有管理员才能看到div,但是当我以用户身份登录时,会显示上面的div,或者它应该消失。你能告诉我问题在哪里吗?谢谢。

3 个答案:

答案 0 :(得分:1)

你可以用百里香替换吗

<div sec:authorize="hasRole('ROLE_ADMIN')">Only for admin</div>

以下

<div sec:authorize="hasAuthority('ADMIN')">Only for admin</div>

让我知道它是否适合你。

答案 1 :(得分:0)

如果未将 thymeleaf-extras-springsecurity 更改为正确的版本,请确保使用的是 spring security 4

答案 2 :(得分:0)

搜索并尝试了解问题后,我发现方言存在问题

您可以在此处看到如何添加方言: How do I add Thymeleaf SpringSecurityDialect to spring boot

tl;博士 将此添加到您的配置

    @Bean
 public SpringSecurityDialect securityDialect() {
     return new SpringSecurityDialect();
 }