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

显示自定义页面时出现Spring Security错误

柯锋
2023-03-14

我正在进行Spring Security集成,我的内置安全页面的应用程序运行良好。但是对于自定义登录页面,它给出了错误

The localhost page isn’t working

以下是我的代码供参考

在spring-security.xml

  <http use-expressions="true">
      >

        <intercept-url pattern="/**" access="isAuthenticated()"/> <!-- this means all URL in this app will be checked if user is authenticated -->

            <form-login
            login-page="/login"
            default-target-url="/"
            authentication-failure-url="/login?error"
            username-parameter="username"
            password-parameter="password" />


        <logout logout-url="/logout" logout-success-url="/"/> <!-- the logout url we will use in JSP -->
    </http>

在login.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
<title>Custom Login Page</title>
</head>
<body onload='document.loginForm.j_username.focus();'>
<h3>Custom Login Page</h3>

<%

String errorString = (String)request.getAttribute("error");
if(errorString != null && errorString.trim().equals("true")){
out.println("Incorrect login name or password. Please retry using correct login name and password.");
}
%>

<form name='loginForm' action="<c:url value='j_spring_security_check' />"
method='POST'>

<table>
<tr>
<td>User:</td>
<td><input type='text' name='j_username' value=''>
</td>
</tr>
<tr>
<td>Password:</td>
<td><input type='password' name='j_password' />
</td>
</tr>
<tr>
<td><input name="submit" type="submit"
value="submit" />
</td>
<td><input name="reset" type="reset" />
</td>
</tr>
</table>

</form>
</body>
</html>

在控制器中:

@RequestMapping(value = "/login", method = RequestMethod.GET)
    public ModelAndView login(ModelMap mode,
            @RequestParam(value = "error", required = false) String error,
            @RequestParam(value = "logout", required = false) String logout) {
        System.out.println("\n\t -------------");
        ModelAndView model = new ModelAndView("login");

        if (error != null) {
            model.addObject("error", "Invalid username and password!");
        }

        if (logout != null) {
            model.addObject("msg", "You've been logged out successfully.");
        }
        return model;

    }

当我使用内置表单pulgin运行项目时,url是

http://localhost:8080/SpringMvcSecurity/spring_security_login

登录后,如果我手动点击网址

http://localhost:8080/SpringMvcSecurity/login

它向我显示了登录页面,但我没有看到。如果这次显示了该页面,那么为什么它没有在自定义配置中显示。请帮帮忙。

谢谢,shazin,有4个变化。

  1. 需要在请求中更改 url 名称映射 url ex:自定义登录
  2. 相同的名称需要在Spring安全中替换.xml
  3. 在Spring安全中添加行.xml
  4. 替换用户名密码属性名称,这些名称在jsp页面中的显示方式。

<代码>

共有1个答案

方韬
2023-03-14
shazin its shows neither exception nor 404 its displays message saying, localhost redirected you too many times..that's it. thanks for your reply 

这是因为您有@RequestMapping值和.jsp名称作为登录名。至少更改一个如下更改。

    @RequestMapping(value = "/customlogin", method = RequestMethod.GET)
    public ModelAndView login(ModelMap mode,
            @RequestParam(value = "error", required = false) String error,
            @RequestParam(value = "logout", required = false) String logout) {
        System.out.println("\n\t -------------");
        ModelAndView model = new ModelAndView("login");

        if (error != null) {
            model.addObject("error", "Invalid username and password!");
        }

        if (logout != null) {
            model.addObject("msg", "You've been logged out successfully.");
        }
        return model;

    }

在您的配置中

<http pattern="/customlogin*" security="none"/>
<http use-expressions="true">
      >
        <intercept-url pattern="/**" access="isAuthenticated()"/> <!-- this means all URL in this app will be checked if user is authenticated -->

            <form-login
            login-page="/customlogin"
            default-target-url="/"
            authentication-failure-url="/customlogin?error"
            username-parameter="j_username"
            password-parameter="j_password" />


        <logout logout-url="/logout" logout-success-url="/"/> <!-- the logout url we will use in JSP -->
    </http>
 类似资料:
  • 本文向大家介绍在ASP.NET Core中显示自定义的错误页面,包括了在ASP.NET Core中显示自定义的错误页面的使用技巧和注意事项,需要的朋友参考一下 前言 相信每位程序员们应该都知道在 ASP.NET Core 中,默认情况下当发生500或404错误时,只返回http状态码,不返回任何内容,页面一片空白。 如果在 Startup.cs 的 Configure() 中加上 app.UseS

  • Flask 自带了很顺手的 abort() 函数用于以一个 HTTP 失败代码 中断一个请求,他也会提供一个非常简单的错误页面,用于提供一些基础的描述。 这个页面太朴素了以至于缺乏一点灵气。 依赖于错误代码的不同,用户看到某个错误的可能性大小也不同。 通常的错误代码 下面列出了一些用户经常遇到的错误代码,即使在这个应用准确无误的情况下也可能发生: 404 Not Found 经典的“哎呦,您输入的

  • 本文向大家介绍Laravel5.1自定义500错误页面示例,包括了Laravel5.1自定义500错误页面示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Laravel5.1自定义500错误页面的方法。分享给大家供大家参考,具体如下: Laravel 5.1中500错误是程序错误,程序错误一定是系统自带的500错误,可以通过以下步骤简单实现自定义500错误页面。 编辑PHP文件app/

  • 我们使用Spring Security OAuth2保护我们的REST服务(用于服务器到服务器通信,不涉及用户)。但是,当您尝试访问浏览器中的受保护资源时,它将显示: 我们希望这是我们自己选择的自定义页面。有办法吗? 设置“拒绝访问”页面不起作用。首先,它需要定义一个登录页面,我们没有,因为这是一个纯服务器到服务器的通信。另一个原因是,这个属性自Spring 3.0..或类似的版本以来就被弃用了。

  • 问题内容: 假设我们有: 尝试输入错误的URL时,用户会看到一个普通的“找不到404页”。如何为这种情况返回自定义页面? 有关大猩猩/木糖的更新 对于使用纯net / http软件包的用户,可以接受答案。 如果您使用大猩猩/多路复用器,则应使用以下内容: 并根据需要实施。 问题答案: 我通常这样做: 在这里,我将代码简化为仅显示自定义404,但实际上使用此设置可以做更多的事情:我使用来处理所有HT

  • 引用EAVSet.nsi的内容: !define PRODUCT_NAME "ESET NOD32 Antivirus" SetCompressor /SOLID lzma SetCompressorDictSize 32 !include "MUI.nsh" !include "UsefulLib.nsh" !define MUI_ABORTWARNING !define MUI_ICON