【问题标题】:Spring security intercept URL not working for single page applicationSpring 安全拦截 URL 不适用于单页应用程序
【发布时间】:2017-09-13 02:15:19
【问题描述】:

这是我的 spring 安全文件:

<http auto-config="true" use-expressions="true">
        <intercept-url pattern="/login" access="isAnonymous()" />
        <intercept-url pattern="/stat" access="hasRole('ROLE_USER')" />
        <intercept-url pattern="/articles" access="hasRole('ROLE_USER')" />
        <intercept-url pattern="/**" access="hasRole('ROLE_ADMIN')" />
        <form-login login-page="/index.html#/login"
            default-target-url="/index.html#/articles"
            authentication-failure-url="/index.html#/login?error"
            username-parameter="username" password-parameter="password" />
        <logout logout-success-url="/index.html#/login?logout" />
    </http>

这里我最后只提到拦截 URL '/**'。

下面是我的 web.xml:

<servlet>
        <servlet-name>mvc-dispatcher</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:dispatcher-config.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>mvc-dispatcher</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
    <!-- for spring security -->
    <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>
    </filter-mapping>

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring-security.xml</param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

但我仍然遇到重定向问题,/login 和其他 url 模式没有映射到处理程序!

这里是 app.js:

searchApp.config([ '$routeProvider', function($routeProvider) {
    $routeProvider.when('/articles', {
        templateUrl : 'partials/articles-list-accordian.html',
        controller : 'ArticlesController'
    }).when('/login', {
        templateUrl : 'partials/login.html',
        controller : 'LoginControllers'
    }).when('/stat', {
        templateUrl : 'partials/job-stat.html',
        controller : 'JobStatController'
    }).otherwise({
        /*redirectTo : '/welcome'*/
        redirectTo : '/articles'
    });
} ]);

请在这里指导我,我是spring security的新手,因此可能会犯一些愚蠢的错误..

【问题讨论】:

  • 您是否试图拦截服务器中的客户端路由?
  • 抱歉耽搁了@RaghuVenmarathoor 没有正常的服务器端路由。

标签: angularjs spring-security


【解决方案1】:

有一个很好的使用 AngularJS 应用 spring 安全性的教程,它绝对不是简单的,你必须在你的应用程序中做一些改变。

例如,建议使用 httpBasic 安全而不是 formLogin 身份验证方法。您还需要使用 HTTP 标头将您的凭据发送到您的服务器,内容应该被编码。

您可以在这里阅读如何操作:

https://spring.io/guides/tutorials/spring-security-and-angular-js/

我已经使用指定的技术堆栈成功实现了它,如果您需要进一步的帮助,请告诉我。

【讨论】:

  • 哦,我现在明白了!是的,这根本不是微不足道的!除了你提到的网址,我发现This_link 也很有用。我会带着更多的疑问回到 cmets(如果有的话)谢谢..
猜你喜欢
  • 2014-11-27
  • 2014-07-18
  • 2013-05-06
  • 1970-01-01
  • 2023-03-16
  • 2015-02-23
  • 2017-01-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多