当前位置: 首页 > 知识库问答 >
问题:

Spring security重定向到已验证URL的登录页面

许嘉福
2023-03-14

我是Spring的新手。我正在创建一个spring mvc应用程序。我有一个管理员url“/admin/”。如果我使用用户凭据和角色_ADMIN登录,那么我可以访问管理员页面。现在,这个场景运行良好。但如果我没有使用角色_ADMIN登录,并且我尝试访问/ADMIN/url,Spring Security性会将我重定向到/login页面。

这里我不想向外界公开 /admin/(或管理员url存在)url需要身份验证。如果未经授权的人试图访问 /admin/url,我想显示默认异常页面或主页。

此外,我需要自定义“/login”url,比如“/custom_url/”而不是“/login”

但现在我不知道如何实现这一点。感谢您的帮助。

</bean>  
<security:http auto-config="true">
    <security:intercept-url pattern="/admin/**" 
access="hasRole('ROLE_ADMIN')" />

     <security:form-login
        login-page="/login"
        default-target-url="/admin"
        always-use-default-target="true"
        login-processing-url="/j_spring_security_check"
        authentication-failure-url="/login?error"
        username-parameter="username"
        password-parameter="password" />
   <security:logout logout-success-url="/" invalidate-session="true" logout-
url="/logout" />
</security:http>

<security:authentication-manager>
    <security:authentication-provider>
        <security:jdbc-user-service data-source-ref="dataSource"
                                    authorities-by-username-query="SELECT 
username, authority From authorities WHERE username = ?"
                                    users-by-username-query="SELECT 
username, password, enabled FROM users WHERE username = ?" />
    </security:authentication-provider>
</security:authentication-manager>
@RequestMapping("/login")
public String login(@RequestParam(value="error", required = false) String 
error, @RequestParam(value="logout",
        required = false) String logout, Model model) {
    if (error!=null) {
        model.addAttribute("error", "Invalid username and password");
    }

    if(logout!=null) {
        model.addAttribute("msg", "You have been logged out successfully.");
    }

    return "login";
}
   <c:if test="${not empty msg}">
            <div class="msg">${msg}</div>
        </c:if>

   <form name="loginForm" action="<c:url 
value="/j_spring_security_check" />" method="post">
            <c:if test="${not empty error}">
                <div class="error" style="color: #ff0000;">${error}</div>
            </c:if>
            <div class="form-group">
                <label for="username">User: </label>
                <input type="text" id="username" name="username" 
class="form-control" />
            </div>
            <div class="form-group">
                <label for="password">Password:</label>
                <input type="password" id="password" name="password" 
class="form-control" />
            </div>

            <input type="submit" value="Submit" class="btn btn-default">

            <input type="hidden" name="${_csrf.parameterName}" 
value="${_csrf.token}" />
        </form>

我使用的是Spring security 4。

共有1个答案

公孙高轩
2023-03-14

身份验证-失败-url="/login?错误"更改为身份验证-失败-url="/"。这将将您重定向到主页。

application ationContext.xml中正确的xml片段如下:

 <security:form-login
    login-page="/login"
    default-target-url="/admin"
    always-use-default-target="true"
    login-processing-url="/j_spring_security_check"
    authentication-failure-url="/"
    username-parameter="username"
    password-parameter="password" />

注意:您可以根据需要将身份验证失败url属性的值更改为异常页面。

 类似资料:
  • 记录器文件中的日志- org.springframework.Security.Access.event.loggerlistener-安全授权失败,原因是:org.springframework.Security.Access.accessdeniedexception:访问被拒绝;通过身份验证的主体:org.springframework.security.authentication.ano

  • 我的登录页面将我重定向到url为而不是仪表板。这是我的登录控制器 类 网状物php 我希望重定向到仪表板页面登录后使用用户名和密码,我试图改变路线在ReDirectIfAuthenticated.php但它不工作。

  • 我使用Laravel 5.2。我想问一个问题。如何更改重定向登录表单在laravel当我们已经做登录?我使用的是来自Php artisan make: auth的auth。 我已经登录并重定向到localhost:8000/admin 然后我再次打开localhost:8000/登录。它将重定向到“/”或localhost:8000/ 我的问题是如何将“/”更改为“/”管理员“?因此,即使我已经登

  • 试图阻止来宾用户的路由。当有人点击时,它将检查用户是否以管理员身份登录。如果admin然后它工作正常,如果代理然后它重定向到登录页面,但如果我作为访客用户点击链接,它不会将我重定向到登录页面,而是显示一些错误: 路由中的错误异常。php第53行:尝试获取非对象的属性。 这是我的路线。php文件:

  • 我正在使用ApacheShiro开发JSF应用程序。我用Shiro引诱用户,并将其重定向到主页。这没有问题。验证后,当我尝试访问登录页面时,它不会将我重定向到主页。即使已经有loggedin用户,我也可以再次登录。正如巴卢斯克在他的博客文章中提到的,我正在进行程序登录。 这个滤镜是根据博文写的。 } 问题是什么?如果用户已经通过身份验证,我该如何重定向用户? 编辑:现在,如果用户已经通过身份验证,

  • 我在auth中间件方面遇到了一些问题。我将中间件放在一个路由组中,并回滚了users表。我希望应用程序将我重定向到我的登录/搜索页面,但它没有这样做,它只是给了我“尝试获取非对象的属性”,它指的是我的仪表板视图中的函数(我不应该访问该函数)。 这是我的路线代码: 以下是我的观点: 另外,我不确定从数据库中删除用户是否意味着Laravel将自动删除用户会话。 谢谢你的帮助!