gpt4 book ai didi

java - 无法在 Apache Shiro 中设置成功 URL

转载 作者:行者123 更新时间:2023-11-30 10:52:15 25 4
gpt4 key购买 nike

我曾尝试使用 Apache Shiro 作为安全框架来保护我的 Web 应用程序。在这样做的同时,我想设置成功登录后用户重定向到的成功 URL。默认情况下,客户端在成功登录后被重定向到最初请求的页面(在 API 中提到)。

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 作为我的 Web 应用程序的容器。

这里涉及的主要文件如下:

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

我的 webapp 的 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 页面。用户在请求任何 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>

如果我遗漏了任何细节,请告诉我。

最佳答案

你必须添加

/login.jsp = authc

在 shiro.ini 的 url 部分。

/login.jsp 不限于经过身份验证的用户(否则没有人可以登录!),但仍必须为其指定“authc”过滤器,以便它可以处理该 url 的登录提交。它足够“聪明”,可以按照上面的 shiro.loginUrl 指定的方式允许这些请求通过。

关于java - 无法在 Apache Shiro 中设置成功 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34410401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com