Я следующие конфигурации безопасности пружинных:Spring JSP безопасности авторизированным тег не работает
<security:http auto-config="true">
<security:intercept-url pattern="/**" access="permitAll" />
<security:form-login
login-processing-url="/j_spring_security_check"
login-page="/login"
default-target-url="/"
authentication-failure-url="/login?error"
username-parameter="login"
password-parameter="password" />
<security:logout logout-url="/j_spring_security_logout" logout-success-url="/login" />
<security:csrf disabled="true"/>
</security:http>
Я хочу, чтобы сделать конкретную страницу (скажем индексной страницы («/»)) доступны для всех (и с проверкой подлинности и не- пользователи, прошедшие проверку подлинности), но в то же время могут управлять тем, какие части должны отображаться в jsp, в зависимости от того, аутентифицирован ли пользователь или нет, и его роли.
Моя часть JSP выглядит следующим образом:
<%@ page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>
<%@ taglib prefix="t" tagdir="/WEB-INF/tags" %>
<t:main>
<jsp:attribute name="title">
Posts
</jsp:attribute>
<jsp:body>
<sec:authorize access="hasRole('ADMIN')">
<a href="/blog/createPost">Create post</a>
</sec:authorize>
<br>
<c:forEach var="post" items="${posts}">
<hr width="300" align="left">
<div>
<h4><a href="/blog/viewPost/${post.id}">${post.title}</a></h4>
<div>${post.content}</div>
</div>
</c:forEach>
</jsp:body>
</t:main>
Все механизм аутентификации работает отлично. Проблема в том, что ссылка никогда не отображается, даже если я вхожу в систему, используя роль «ADMIN».
Я пытался отладки моя реализация UserDetailsService и проверить, что «ADMIN» роль успешно извлекается и разливают в UserDetails:
@Override
public UserDetails loadUserByUsername(String login) throws UsernameNotFoundException {
User user = userDao.findOneByLogin(login);
if (user == null) {
throw new UsernameNotFoundException(login + " not found");
}
List<GrantedAuthority> authList = new ArrayList<>();
List<Role> roles = user.getRoles();
for (Role role : roles) {
authList.add(new SimpleGrantedAuthority(role.getName()));
}
return new org.springframework.security.core.userdetails.User(
user.getLogin(), user.getPassword(), authList);
}
Спасибо, заранее!
Пожалуйста, покажите полный код jsp, где используется тег безопасности. – shazin
@shazin Я вставил полный код jsp. –