我是新来的春天。我正在创建一个spring mvc app。我有一个管理员网址“/admin/"。如果我使用ROLE_ADMIN登录用户凭据,那么我可以访问管理页面。现在这种情况正常。但是如果我没有使用ROLE_ADMIN登录并且我尝试访问/ admin / url spring security将我重定向到/ login页面。
这里我想要不向外界揭示/ admin /(或admin url存在)url需要身份验证。如果有人未经授权尝试访问/ admin / url,我想显示默认的异常页面或主页。
此外,我需要自定义“/ login”网址,如“/ 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。
将authentication-failure-url="/login?error"
更改为authentication-failure-url="/"
。这会将您重定向到主页。
applicationContext.xml
中正确的xml-snippet如下:
<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" />
注意:您可以根据需要将authentication-failure-url
属性的值更改为异常页面。