Im currenlty работает над веб-приложением Java EE с Spring MVC. Я хочу защитить его с помощью Apache Shiro и проверки подлинности на основе формы с помощью FormAuthenticationFilter уже работает. Теперь я хочу настроить логин и написать свой собственный логин-контроллер.Apache Shiro: не удалось получить доступ к защищенному URL, хотя успешно прошел регистрацию
Вот моя проблема: проверка подлинности работает, я не получаю никаких исключений, но я все еще не могу получить защищенный URL (/welcome.jsp), даже если я попытаюсь получить к нему доступ напрямую, хотя я (Subject.isAuthenticated возвращает true).
Вот мой shiro.ini:
# =======================
# Shiro INI configuration
# =======================
[main]
authc = org.apache.shiro.web.filter.authc.PassThruAuthenticationFilter
#authc = org.apache.shiro.web.filter.authc.FormAuthenticationFilter
authc.loginUrl = /login.jsp
authc.successUrl = /welcome.jsp
sessionManager = org.apache.shiro.web.session.mgt.DefaultWebSessionManager
securityManager.sessionManager = $sessionManager
[users]
admin=admin, ROLE_ADMIN
[roles]
ROLE_ADMIN = *
[urls]
/login.jsp = authc
/welcome.jsp = authc
А вот метод в соответствующем классе контроллера:
@RequestMapping(value="/login", params ={"username","password"})
public ModelAndView login(HttpServletRequest request, HttpServletResponse response,
@RequestParam("username") String username, @RequestParam("password") String password) {
if (!this.currentUser.isAuthenticated()) {
UsernamePasswordToken token = new UsernamePasswordToken(username, password);
try {
this.currentUser.login(token);
} catch (UnknownAccountException uae) {
logger.info("There is no user with username of " + token.getPrincipal());
} catch (IncorrectCredentialsException ice) {
logger.info("Password for account " + token.getPrincipal() + " was incorrect!");
} catch (LockedAccountException lae) {
logger.info("The account for username " + token.getPrincipal() + " is locked. " +
"Please contact your administrator to unlock it.");
}
catch (AuthenticationException ae) {
//TODO
}
logger.info("User [" + currentUser.getPrincipal() + "] logged in successfully.");
}
String message = "";
ModelAndView modelAndView = new ModelAndView("login", "message", message);
String fallbackUrl = "/welcome.jsp";
try
{
WebUtils.redirectToSavedRequest(request, response, fallbackUrl);
}
catch (IOException e)
{
e.printStackTrace();
}
return modelAndView;
}
Я был бы очень рад, если кто-то может сказать мне, что я «Я делаю неправильно, я застрял в этом несколько дней и не нашел ничего в Интернете.
С уважением, M.B.
P.S. Я не размещал свой web.xml и мой pom.xml, потому что сиро уже работает с FormAuthenticationFilter. Но если кому-то все еще нужны эти файлы, чтобы дать мне ответ, это не проблема, чтобы опубликовать их тоже.
ОБНОВЛЕНИЕ 1: Это должно быть проблема с самим Сиро. Если я убегаю только последнюю строку в файле shiro.ini,
#/welcome.jsp = authc
переназначение работает правильно и имя пользователя: «админы» отображается только на приветствиях-странице, если ввести имя пользователя и пароль правильно.
По какой-то причине сиро не принимает аутентифицированного пользователя, но я совершенно не знаю, почему.