#java #spring #security
#java #spring #Безопасность
Вопрос:
У меня проблема с Spring Security. Я создал 3 роли (ROLE_ADMIN, ROLE_MOD, ROLE_USER). Я сохраняю роли в базе данных с паролями и именами пользователей. В JSP я создал 3 разных меню для всех ролей. Во всех меню есть 3 строки, которые повторяют «/ messages», «/profile», «/logout». Если я вхожу как МОД или ПОЛЬЗОВАТЕЛЬ, все работает нормально, но если я вхожу как АДМИНИСТРАТОР, я не могу получить доступ к «/ messages» и «/profile».
Что не так с моей конфигурацией или jsp?
конфигурация безопасности:
@Override
protected void configure(HttpSecurity http) throws Exception {
//@formatter:off
http
.authorizeRequests()
.antMatchers("/"
,"/tutorials"
,"/search"
,"/about"
,"/contact"
,"/register",
"/css/*",
"/js/*",
"/img/*")
.permitAll()
.antMatchers(
"/messages",
"/profile",
"/logout",
"/newsmanager",
"/tutorialsmanager",
"/usersmanager",
"/sendemails"
)
.hasRole("ADMIN")
.antMatchers(
"/suggestnews",
"/suggesttutorial",
"/messages",
"/profile",
"/logout"
)
.hasRole("MOD")
.antMatchers(
"/messages",
"/profile",
"/logout"
)
.hasRole("USER")
.and()
.formLogin()
.loginPage("/login")
.defaultSuccessUrl("/")
.permitAll()
.and()
.logout()
.permitAll();
//@formatter:on
}
фрагмент JSP:
<sec:authorize access="hasRole('ROLE_ADMIN')">
<button class="btn btn-default dropdown-toggle" type="button"
id="dropdownMenu1" data-toggle="dropdown" aria-haspopup="true"
aria-expanded="true">
Account <span class="caret"></span>
</button>
<ul class="dropdown-menu" aria-labelledby="dropdownMenu1">
<li><a href="/messages">Messages</a></li>
<li><a href="/profile">Profile</a></li>
<li role="separator" class="divider"></li>
<li><a href="/tutorialsmanager">Tutorials manager</a></li>
<li><a href="/newsmanager">News manager</a></li>
<li><a href="/usersmanager">Users manager</a></li>
<li><a href="/sendemails">Send emails</a></li>
<li role="separator" class="divider"></li>
<li><a href="javascript:$('#logoutForm').submit();">Log
out</a></li>
</ul>
</sec:authorize>
<!-- APPEARED FOR ROLE_USER -->
<sec:authorize access="hasRole('ROLE_USER')">
<button class="btn btn-default dropdown-toggle" type="button"
id="dropdownMenu2" data-toggle="dropdown" aria-haspopup="true"
aria-expanded="true">
Account <span class="caret"></span>
</button>
<ul class="dropdown-menu" aria-labelledby="dropdownMenu2">
<li><a href="/messages">Messages</a></li>
<li><a href="/profile">Profile</a></li>
<li role="separator" class="divider"></li>
<li><a href="javascript:$('#logoutForm').submit();">Log
out</a></li>
</ul>
</sec:authorize>
<!-- APPEARED FOR ROLE_MOD -->
<sec:authorize access="hasRole('ROLE_MOD')">
<button class="btn btn-default dropdown-toggle" type="button"
id="dropdownMenu3" data-toggle="dropdown" aria-haspopup="true"
aria-expanded="true">
Account <span class="caret"></span>
</button>
<ul class="dropdown-menu" aria-labelledby="dropdownMenu3">
<li><a href="/messages">Messages</a></li>
<li><a href="/profile">Profile</a></li>
<li role="separator" class="divider"></li>
<li><a href="/suggestnews">Suggest a news</a></li>
<li><a href="/suggesttutorial">Suggest a tutorial</a></li>
<li role="separator" class="divider"></li>
<li><a href="javascript:$('#logoutForm').submit();">Log
out</a></li>
</ul>
</sec:authorize>
Комментарии:
1.
hasRole
отключаетROLE_
интерфейс. Вы используетеUSER
в одном месте, аROLE_USER
в другом.2. Я изменил это, но все еще не работает.
3. Можете ли вы также поделиться журналом консоли.
4. Ну, я не получаю никаких ошибок с консоли. Единственная ошибка — это белая страница. Страница с ошибкой белой метки В этом приложении нет явного сопоставления для / error, поэтому вы рассматриваете это как запасной вариант. Вс 23 октября 11:08:27 по восточному времени 2016 Произошла непредвиденная ошибка (тип =запрещено, статус = 403). Доступ запрещен
Ответ №1:
Что ж, мне удалось решить мою проблему. Я изменил доступ к профилю, сообщению и выходу из системы. Теперь все аутентифицированные пользователи могут получить к нему доступ.
@Override
protected void configure(HttpSecurity http) throws Exception {
//@formatter:off
http
.authorizeRequests()
.antMatchers("/"
,"/tutorials"
,"/search"
,"/about"
,"/contact"
,"/register",
"/css/*",
"/js/*",
"/img/*")
.permitAll()
.antMatchers(
"/suggestnews",
"/suggesttutorial")
.hasRole("MOD")
.antMatchers(
"/newsmanager",
"/tutorialsmanager",
"/usersmanager",
"/sendemails"
.hasRole("ADMIN")
**.antMatchers(
"/messages",
"/profile",
"/logout")
.authenticated()**
.and()
.formLogin()
.loginPage("/login")
.defaultSuccessUrl("/")
.permitAll()
.and()
.logout()
.permitAll();
//@formatter:on
}