Я занимаюсь разработкой веб-приложения Spring MVC.Я хочу реализовать Spring Security для определенных ролей.У меня три роли: пользователь, администратор и клиент.
Вот мой пример кода:
context-security.xml
<global-method-security
secured-annotations="enabled" proxy-target-class="true">
</global-method-security>
<http pattern="/resources/**" security="none" />
<http pattern="/javax.faces.resource/**" security="none" />
<http pattern="/img/**" security="none" />
<http pattern="/login*" security="none" />
<http auto-config="true" access-denied-page="/accessDenied.xhtml">
<anonymous enabled='false' />
<intercept-url pattern="/login*"
access="IS_AUTHENTICATED_ANONYMOUSLY" />
<intercept-url pattern="/**" access="ROLE_ADMIN" />
<intercept-url pattern="/pages/user**"
access="ROLE_USER" />
<intercept-url pattern="/pages/cutomer**"
access="ROLE_CUSTOMER" />
<form-login login-processing-url="/j_spring_security_check"
login-page="/login.xhtml"
authentication-success-handler-ref="customSuccessHandler"
authentication-failure-url="/login" />
<logout logout-url="/logout" logout-success-url="/login"
invalidate-session="true" delete-cookies="JSESSIONID" />
</http>
<beans:bean id="customAuthenticationProvider"
class="com.invetechs.security.CustomAuthenticationProvider" />
<authentication-manager
alias="authenticationManager">
<authentication-provider
ref="customAuthenticationProvider">
</authentication-provider>
</authentication-manager>
HappyfacesUserDetails
public static final class HappyfacesUserDetails implements UserDetails {
private static final long serialVersionUID = 1L;
/** User. */
private User user;
/** Constructor. */
private HappyfacesUserDetails(User user) {
super();
this.user = user;
}
@Override
public boolean isEnabled() {
return true;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return true;
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public String getUsername() {
return user.getUserName();
}
@Override
public String getPassword() {
return user.getPassword();
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
List<GrantedAuthority> roles = new ArrayList<GrantedAuthority>();
roles.add(new GrantedAuthority() {
private static final long serialVersionUID = 1L;
@Override
public String getAuthority() {
if (user.getId() == -1L)
return "ROLE_ADMIN";
else if (user.getId() == 1L )
return "ROLE_CUSTOMER";
else
return "ROLE_USER";
}
});
return roles;
}
public User getUser() {
return user;
}
}
каталоги проектов
Подробнее
Проект имееттри основные роли: администратор, пользователь и клиент.Каждая роль имеет права доступа к страницам в каталоге, содержащем имя роли из каталога веб-приложения.Например: пользовательская роль может обращаться к страницам внутри каталога пользователя и то же самое для других ролей.
В текущей ситуации администратор может получить доступ к каждому каталогу, а другие роли не могут получить доступ ни к чему в приложении.
Я думаю, что моя проблема в файле context-security
, но я не могу понять, в чем проблема.