2015-12-22 3 views
2

Я пытался использовать Apache Shiro в качестве основы безопасности для защиты моего веб-приложения. Выполняя это, я хотел установить URL-адрес успеха, с которого пользователь перенаправляется после успешного входа в систему. По умолчанию клиент получает перенаправление на первоначально запрошенную страницу после успешного входа в систему (упомянутый в API).Не удалось установить URL успеха в Apache Shiro

https://shiro.apache.org/static/1.2.1/apidocs/src-html/org/apache/shiro/web/filter/authc/AuthenticationFilter.html

Мой вопрос, мы можем изменить это поведение по умолчанию и перенаправить пользователя на конкретную страницу успеха при входе в систему?

Из того, что я знаю, мы можем говорить об этом в файле shiro.ini

authc.successUrl = /personalaccountpage.html 

где authc является неявный объект предоставляется в Shiro приложений с поддержкой. Но это не похоже на приложение. Пользователь всегда перенаправляется на запрошенный URL.

Я знаю, что это нелогично сказать, что я хочу, чтобы перенаправить пользователя на другую страницу, даже если пользователь запросил конкретную страницу, но я хотел бы понять цель конфигурации, предоставленной нам приведенным ниже:

authc.successUrl

Я использую Apache Shiro 1.2.4 и Tomcat 7 в качестве контейнера для своего веб-приложения.

Вот основные файлы выполнявшие здесь:

shiro.ini файл

# ============================================================================= 
# Tutorial INI configuration 
# 
# Usernames/passwords are based on the classic Mel Brooks' film "Spaceballs" :) 
# ============================================================================= 


[main] 

# specify login page 
authc.loginUrl = /login.jsp 

# redirect after successful login 
authc.successUrl = /personalaccountpage.html 

# name of request parameter with username; if not present filter assumes 'username' 
authc.usernameParam = user 
# name of request parameter with password; if not present filter assumes 'password' 
authc.passwordParam = pass 
# does the user wish to be remembered?; if not present filter assumes 'rememberMe' 
authc.rememberMeParam = remember 

# ----------------------------------------------------------------------------- 
# Users and their (optional) assigned roles 
# username = password, role1, role2, ..., roleN 
# ----------------------------------------------------------------------------- 
[users] 
root = secret, admin 
guest = guest, guest 
presidentskroob = 12345, president 
darkhelmet = ludicrousspeed, darklord, schwartz 
lonestarr = vespa, goodguy, schwartz 

# ----------------------------------------------------------------------------- 
# Roles with assigned permissions 
# roleName = perm1, perm2, ..., permN 
# ----------------------------------------------------------------------------- 
[roles] 
admin = * 
schwartz = lightsaber:* 
goodguy = winnebago:drive:eagle5 

[urls] 
/**=authc 

web.xml моего веб-приложение

<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
      http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    version="2.5"> 

    <display-name>Archetype Created Web Application</display-name> 

    <listener> 
     <listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class> 
    </listener> 

    <filter> 
     <filter-name>ShiroFilter</filter-name> 
     <filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class> 
    </filter> 

    <filter-mapping> 
     <filter-name>ShiroFilter</filter-name> 
     <url-pattern>/*</url-pattern> 
     <dispatcher>REQUEST</dispatcher> 
     <dispatcher>FORWARD</dispatcher> 
     <dispatcher>INCLUDE</dispatcher> 
     <dispatcher>ERROR</dispatcher> 
    </filter-mapping> 
</web-app> 

login.jsp страницы для мой webapp. Пользователь перенаправляется сюда для входа в систему, когда любой URL просил

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
     pageEncoding="ISO-8859-1"%> 
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
    <html> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
    <title>Please Log In</title> 
    </head> 
    <body> 
<form name="loginform" action="" method="post"> 
     <table align="left" border="0" cellspacing="0" cellpadding="3"> 
      <tr> 
       <td>Username:</td> 
       <td><input type="text" name="user" maxlength="30"></td> 
      </tr> 
      <tr> 
       <td>Password:</td> 
       <td><input type="password" name="pass" maxlength="30"></td> 
      </tr> 
      <tr> 
       <td colspan="2" align="left"><input type="checkbox" name="remember"><font size="2">Remember Me</font></td> 
      </tr> 
      <tr> 
       <td colspan="2" align="right"><input type="submit" name="submit" value="Login"></td> 
      </tr> 
     </table> 
    </form> 
    </body> 
    </html> 

Пожалуйста, дайте мне знать, если я пропустил какие-либо детали.

+0

Где вы разместили файл shiro.ini? – Wouter

+0

Hi @Wouter Мой файл shiro.ini находится в WEB-INF – karanaug88

ответ

0

Я хотел бы понять цель конфигурации предоставленных нам приведенную ниже

authc.successUrl для пользователя, как только он приходит от страницы входа (он должен быть login.jsp и должен также быть приветствуемой страницей в целом для приложения) без URL-адреса, к которому он хотел получить доступ. Если вы хотите перенаправить на статическую страницу, вы можете расширить исходные классы и сделать все, что вам нравится.

1

Вы должны добавить

/login.jsp = authc 

в вашей URLS части shiro.ini.

/login.jsp не ограничивается аутентифицированными пользователями (в противном случае никто не мог бы входить в систему!), Но для этого должен быть указан фильтр «authc», чтобы он мог обрабатывать входные данные этого URL-адреса. Он достаточно «умный», чтобы разрешить эти запросы, как указано сиро.loginUrl выше.

 Смежные вопросы

  • Нет связанных вопросов^_^