Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring security未检测到页面中的用户数量不足_Java_Spring_Spring Security - Fatal编程技术网

Java Spring security未检测到页面中的用户数量不足

Java Spring security未检测到页面中的用户数量不足,java,spring,spring-security,Java,Spring,Spring Security,我真的不知道我怎么会有这个问题。 我开发了一个web应用程序,并使用了框架(Spring、SpringSecurity) 应用程序工作正常,身份验证和管理角色以及权限也正常 <sec:http auto-config="true" use-expressions="true"> <sec:intercept-url pattern="/pagess/admin/**" access="hasRole('ROLE_ADMIN')" />

我真的不知道我怎么会有这个问题。 我开发了一个web应用程序,并使用了框架(Spring、SpringSecurity)

应用程序工作正常,身份验证和管理角色以及权限也正常

    <sec:http auto-config="true" use-expressions="true">

        <sec:intercept-url pattern="/pagess/admin/**" access="hasRole('ROLE_ADMIN')" />
        <sec:intercept-url pattern="/pagess/**" access="hasAnyRole('ROLE_USER','ROLE_ADMIN','ROLE_VISTEUR')" />
        <sec:form-login login-page="/login.jsf"
            authentication-failure-url="/loginFailed.jsf" default-target-url="/Menu.jsf" />
        <sec:logout logout-success-url="/login.jsf" delete-cookies="JSESSIONID"
            invalidate-session="true" />
        <sec:access-denied-handler error-page="/interdit.jsf"/>                                       
        <sec:session-management invalid-session-url="/login.jsf">
            <sec:concurrency-control max-sessions="1"
                error-if-maximum-exceeded="true" />
        </sec:session-management>
    </sec:http>

    <sec:authentication-manager alias="authenticationManager">
        <sec:authentication-provider>
            <sec:jdbc-user-service data-source-ref="DataSource"
                users-by-username-query="
              select username,password, enabled 
              from utilisateur where username=?"
                authorities-by-username-query="
              select username, authority from utilisateur 
              where username =?  " />

        </sec:authentication-provider>
    </sec:authentication-manager>
</beans:beans>

但就在今天,我注意到了一些奇怪的事情。当我在页面中时,我按下上一个GoogleChrome上的箭头,从应用程序进入认证页面,。 就在我从相反的意义上拉动flech Advent之后,它允许我访问应用程序,但没有授权是不正常的

 <context-param>
  <param-name>contextConfigLocation</param-name>
      <param-value>
     /WEB-INF/application.xml
     /WEB-INF/spring_sec.xml
      </param-value>
   </context-param>
   <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Development</param-value>
    </context-param>
 <listener>
  <listener-class>
   org.springframework.web.context.ContextLoaderListener
  </listener-class>
   </listener>

   <filter>
        <filter-name>springSecurityFilterChain</filter-name>
        <filter-class>
            org.springframework.web.filter.DelegatingFilterProxy
        </filter-class>
    </filter>

    <filter-mapping>
        <filter-name>springSecurityFilterChain</filter-name>
        <url-pattern>/*</url-pattern>
    <dispatcher>FORWARD</dispatcher>
    <dispatcher>REQUEST</dispatcher>
    </filter-mapping>

    <listener> 
<listener-class>
org.springframework.security.web.session.HttpSessionEventPublisher
</listener-class> 
</listener>

   <listener>
  <listener-class>
   org.springframework.web.context.request.RequestContextListener
  </listener-class>
   </listener>

上下文配置位置
/WEB-INF/application.xml
/WEB-INF/spring_sec.xml
javax.faces.PROJECT_阶段
发展
org.springframework.web.context.ContextLoaderListener
springSecurityFilterChain
org.springframework.web.filter.DelegatingFilterProxy
springSecurityFilterChain
/*
向前地
要求
org.springframework.security.web.session.HttpSessionEventPublisher
org.springframework.web.context.request.RequestContextListener

我能做什么呢。提前谢谢你。你所描述的听起来像是标准行为。登录到web应用程序后,将创建一个具有安全上下文的会话,用户从此被视为已验证。在浏览器缓存中从网站进行简单导航不会使会话无效。因为这将非常不方便,并且需要用户登录到新站点的每个导航。这就是web应用程序的行为方式

要注销用户,您必须使用
j_-spring\u-security\u-logout
、使会话无效、删除安全上下文中的身份验证或暂停会话。对于简单的浏览器导航来说,这一切似乎都不可行

但是,要实现没有会话的应用程序,您必须将会话超时设置为非常低的间隔,或者在加载页面后直接删除身份验证对象。这通常不是一个非常用户友好的方法。为了得到更好的答案,你可能需要对这个问题(到目前为止还不是一个真正的问题)做更多的阐述,详细说明这个应用程序应该完成什么任务。

<sec:logout logout-success-url="/login.jsf" delete-cookies="JSESSIONID"
        invalidate-session="true" />


但我不确定是否将/login.jsf用于登录,同时注销也会起作用


您可能需要使用
/logout.jsf
来获取
注销url
,您不需要创建logunt.jsf,用户可以使用
/logout.jsf

注销,只是为了澄清问题:您已经验证了自己的身份。然后使用浏览器导航返回到上一页。然后回到需要身份验证的页面,你仍然可以登录。是这样吗?你到底想让它做什么?是的,这是我的问题,他通过登录页面时没有填写用户名和密码。这可能会解决手头的实际“问题”。但是,如果用户只是导航到其他地方,然后返回到web应用程序,而不是返回,会发生什么呢?据我所知,与其说是以计划的方式让用户注销,不如说是在用户离开网页后保持登录。毕竟,阿德里亚诺表示,到目前为止,spring安全机制运行良好。spring安全机制运行良好。您可以在web.xml中设置会话空闲时间,这意味着如果在该时间内有大量的不活动,用户会话将无效。现在,当用户访问任何页面时,如果他作为有效会话(和正确的会话),他将获得该页面,如果他没有会话,他将被重定向到登录页面。如果返回的url指向登录页面,并且他已经有一个会话,他将被重定向到默认目标url中定义的默认url,即Menu.jsf抱歉延迟,我非常感谢您的帮助箱you@Carsten为您提供的帮助。这是我的logoutMethod public String dologout()抛出IOException{FacesContext.getCurrentInstance().getExternalContext().invalidateSession();this.username=“”;this.password=“”;ExternalContext context=FacesContext.getCurrentInstance().getExternalContext();context.redirect(context.getRequestContextPath()+“/j_spring\u security\u logout”);FacesContext.getCurrentInstance().responseComplete();返回null;}但同样在注销后,当我使用上一个按钮返回google chrome时,它允许我访问应用程序。这没有问题,您的应用程序对此也无能为力,因为当您使用浏览器导航时,会使用显示页面的本地缓存实例,而不会向您的服务器发送任何请求。但是此页面上的ion应该会触发未验证的异常或类似情况。这没有问题。(您在缓存页面上尝试过任何操作吗?发生了什么?)
<sec:logout logout-url="/login.jsf" logout-success-url="/login.jsf" delete-cookies="JSESSIONID"
        invalidate-session="true" />