【发布时间】:2016-09-30 23:29:56
【问题描述】:
所以我的 spring 配置 xml 文件中有这个。
<http auto-config="true" use-expressions="true">
<intercept-url pattern="/welcome/*" access="hasRole('ADMIN')" />
<!-- <intercept-url pattern="/login" requires-channel="https" /> -->
<!-- access denied page -->
<access-denied-handler error-page="/403" />
<form-login login-page="/login"
default-target-url="/welcome"
authentication-failure-url="/login?error"
username-parameter="emailId"
password-parameter="pwd" />
<logout logout-success-url="/login?logout"/>
</http>
角色在登录时已正确验证。我有两个问题:
-
pattern="/welcome/*"、pattern="/welcome*"和pattern="/welcome/**"有什么区别?当pattern="/welcome/*"时,登录成功,用户看到页面。在其他两个选项中,都会出现 403 Access Denied 页面。用户确实拥有“管理员”权限) -
Spring 安全进程如何注销?我的welcome.jsp 文件中有以下代码:
<c:url value="/logout" var="logoutUrl" /> <form action="${logoutUrl}" method="GET" id="logoutForm"> <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" /> </form> <script> function formSubmit() { document.getElementById("logoutForm").submit(); } </script> <c:if test="${pageContext.request.userPrincipal.name != null}"> <h2> User : ${pageContext.request.userPrincipal.name} | <a href="javascript:formSubmit()"> Logout</a> </h2> </c:if>这在我的控制器中:
@RequestMapping(value = "/logout", method = RequestMethod.GET) public String logoutPage(HttpServletRequest request, HttpServletResponse response) { Authentication auth = SecurityContextHolder.getContext().getAuthentication(); if (auth != null) { new SecurityContextLogoutHandler().logout(request, response, auth); } return "redirect:/login?logout"; }页面正确重定向并显示“注销成功”页面,但如果我将 URL 更改为再次转到“/welcome”,它会显示该页面。它不应该显示 403 - Access Denied 页面吗?
【问题讨论】:
标签: java spring spring-mvc spring-security