【问题标题】:Bad routing with AngularJS and SpringAngularJS 和 Spring 的错误路由
【发布时间】:2017-07-28 03:41:22
【问题描述】:

我有一个带有 AngularJS 1.3 前端和 Spring API-REST 的应用程序。

对于登录,我使用的是会话(无 jwt),我遇到了这个问题:

  1. 我登录到应用程序。
  2. 在应用程序中导航。
  3. 当会话丢失时,对后端的第一个请求将我发送到登录页面。
  4. 我再次登录应用程序,但它会将我重定向到最后一个请求(将我踢出应用程序的请求),有时是 API 调用,有时是对资源的请求(例如 JavaScript)。

我不确定如何避免这种行为,这是我的 Spring Security 文件:

<sec:http use-expressions="true" auto-config="false">
    <sec:custom-filter ref="captchaFilter" before="FORM_LOGIN_FILTER" />

    <sec:custom-filter position="SWITCH_USER_FILTER" ref="switchUserProcessingFilter" />

    <sec:session-management session-fixation-protection="newSession"></sec:session-management>

    <sec:intercept-url pattern="/j_spring_security_switch_user" access="isAuthenticated()"/>
    <sec:intercept-url pattern="*/app/**" access="isAuthenticated()" />
    <sec:intercept-url pattern="/" access="permitAll" />

    <sec:intercept-url pattern="/login" access="permitAll" />
    <sec:intercept-url pattern="/accessDenied" access="permitAll" />
    <sec:intercept-url pattern="/loginFailed" access="permitAll" />
    <sec:intercept-url pattern="/css/**" access="permitAll" />
    <sec:intercept-url pattern="/img/**" access="permitAll" />
    <sec:intercept-url pattern="/public*" access="permitAll" />
    <sec:intercept-url pattern="/libs/**" access="permitAll" />
    <sec:intercept-url pattern="/fonts/**" access="permitAll" />

    <sec:intercept-url pattern="/*" access="permitAll" />
    <sec:intercept-url pattern="/**" access="isAuthenticated()" />

    <sec:form-login login-page="/login"
        authentication-failure-url="/accessDenied"
        authentication-success-handler-ref="authSuccessHandler"
        authentication-failure-handler-ref="authFailureHandler"
        login-processing-url="/login" />
    <sec:access-denied-handler error-page="/accessDenied" />
    <sec:logout />
</sec:http>

<!-- Authentication providers -->

<bean id="passwordEncoder"
    class="org.springframework.security.authentication.encoding.ShaPasswordEncoder">
    <constructor-arg value="512" />
</bean>

<bean id="authSuccessHandler"
    class="org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler">
</bean>

<bean id="authFailureHandler"
    class="org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler"
    p:defaultFailureUrl="/loginFailed" />

<sec:authentication-manager alias="authenticationManager">
    <sec:authentication-provider ref="jaasAuthProvider" />
</sec:authentication-manager>

</beans>

【问题讨论】:

    标签: java angularjs spring spring-mvc spring-security


    【解决方案1】:

    Spring Security Reference:

    设置默认登录后目的地

    如果尝试访问受保护资源时未提示表单登录,则default-target-url 选项将发挥作用。这是用户成功登录后将被带到的 URL,默认为“/”。您还可以通过将always-use-default-target 属性设置为“true”来进行配置,以便用户始终在此页面结束(无论登录是“按需”还是他们明确选择登录)。如果您的应用程序始终要求用户从“主页”页面开始,这将非常有用,例如:

    <http pattern="/login.htm*" security="none"/>
    <http use-expressions="false">
        <intercept-url pattern='/**' access='ROLE_USER' />
        <form-login login-page='/login.htm' default-target-url='/home.htm' always-use-default-target='true' />
    </http>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-24
      • 2016-05-26
      • 2015-02-25
      • 1970-01-01
      • 2023-03-10
      • 2015-07-26
      相关资源
      最近更新 更多