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

Spring Security-注销和访问控制不工作

高修筠
2023-03-14

我的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>

角色在登录时已正确验证。我有两个问题:

>

<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更改为转到“/欢迎”,它将显示该页面。它不应该显示403-拒绝访问页面吗?

共有1个答案

史意致
2023-03-14

使用前面提到的Ant风格语法的主要作用是解析哪些路径是有效的。

映射使用以下规则匹配URL:

  • 匹配一个字符

关于您的案件:

  • /welcome/*-这可能适用于/welcome/hello/welcome/#hello/welcome/?abc=123
  • /welcome*-有效吗/welcome?abc=123/欢迎#abc=123
  • /welcome/**-有效的案例是/welcome/hello/bye?abc=123

关于这方面的更多信息可以在Spring文档中找到。

我假设您正在使用xml配置来实现安全性。无论如何,这可以修改为纯Java配置的使用。

app-security.xml应该是这样的:

<http use-expressions="true"
      disable-url-rewriting="true">

    <http-basic />

    <!-- other configurations -->

    <intercept-url pattern="/login**" access="isAnonymous()"/>
    <intercept-url pattern="/**" access="isAuthenticated()"/>

    <!-- other configurations -->
    <logout logout-url="/logout"
            logout-success-url="/login"/>
</http>

索引的某个地方。html文件:

<a href="<c:url value="/logout" />" id="item-btn-logout">
    <i class="icon-off"></i> Logout
</a>

最重要的部分是URL:/logout

 类似资料:
  • 我正在学习springsecurity(基于java的配置),我无法使注销正常工作。当我点击注销时,我看到URL更改为http://localhost:8080/logout并获取“HTTP 404-/logout”。登录功能工作正常(即使使用自定义登录表单),但问题是注销,我怀疑重定向的url“localhost:8080/logout”应该类似于“localhost:8808/springte

  • 原文再续,书折第一回。 很多其他编程语言都有一种”protected“设定,可以限制某些类方法只能被它的子类所使用。 Swift支持了访问控制后,大家给我们的反馈都很不错。而有的开发者问我们:“为什么Swift没有类似protected的选项?” 当我们在设计Swift访问控制的不同等级时,我们认为有两种主要场景: 在一个APP里:隐藏某个类的私密细节。 在一个开源框架里:不让导入这个框架的APP

  • 我正在尝试Laravel5.2中的简单注销功能,但我真的不明白我错在哪里。如果有人能帮忙,那就太好了。 这是路线 loginController方法: 视图中使用此功能的链接: 会话存储代码: AuthController构造函数: 当用户单击注销链接时,它会重定向到根页面,但不会真正破坏会话或注销。它不需要登录来查看页面(它应该这样做)。

  • 访问控制限制其他源文件和模块对你的代码的访问。这个特性允许你隐藏代码的实现细节,并指定一个偏好的接口让其他代码可以访问和使用。 你可以给特定的单个类型 (类,结构体和枚举)设置访问级别,比如说属性、方法、初始化器以及属于那些类型的下标。协议可以限制在一定的范围内使用,就像全局常量,变量,函数那样。 除了提供各种级别的访问控制,Swift 为典型场景提供默认的访问级别,减少了显式指定访问控制级别的需

  • 访问控制用于设置访问负载均衡的IP白名单或IP黑名单。 访问控制用于设置访问负载均衡的IP白名单或IP黑名单,在访问控制策略组中仅可以设置IP地址范围,在配置负载均衡实例监听时可设置是否启用访问控制,并设置针对具体的访问控制策略组设置访问白名单或黑名单。 访问控制来源: 同步公有云上被实例上的监听绑定的访问控制,并自动在访问控制缓存里添加一条记录,同步下来的访问控制默认本域共享。 在云管平台上创建

  • 我有一个注销功能,在另一个项目中工作,但由于某种原因,在我目前正在处理的项目中不工作。看起来它只是刷新了页面。我查了Symfony的官方留档https://symfony.com/doc/current/security.html但无济于事。希望你们能帮我。 更新:Security.yml: 控制器: 注销小枝: 编辑:我正在使用Symfony 3.4。当我进入页面 /logout它看起来像只是刷