Конфликт между Spring Security и AngularJS маршрутизацией

0

В настоящее время у меня проблема с конфликтом между angularJS routing и формой входа в систему Spring Security по умолчанию. Если я помещаю угловой маршрут в качестве страницы входа, ему это не нравится и, похоже, начинает бесконечный цикл переадресации.

Index.html

<html ng-app='storeApp'>
<head>
<meta charset="ISO-8859-1">
<title>Online Shopping System</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
</head>
<body>

    <div class="container" ng-controller="testCtrl as tVm">
        {{authenticated}}
        <ul class="nav nav-pills" role="tablist">
            <li class="active"><a href="#/">Home</a></li>
            <li><a href="#/customer">Login</a></li>
            <li ng-show="authenticated"><a href="" ng-click="tVm.logout()">Logout</a></li>
        </ul>
    </div>
    <div class="container-fluid" ng-view></div>

</body>

<script src="https://code.angularjs.org/1.4.7/angular.min.js"></script>
<script src="https://code.angularjs.org/1.4.7/angular-route.min.js"></script>
<script src="https://code.angularjs.org/1.4.7/angular-resource.min.js"></script>
<script src="app.js"></script>
<script src="customers.js"></script>
<script src="products.js"></script>
</html>

Маршрутизация для страницы клиента в customers.js

 angular.module('storeApp').config(['$routeProvider', '$httpProvider', function($routeProvider, $httpProvider){
        $routeProvider.
        when("/customer", {
            templateUrl: "/customer.html"
            //controller: 'customerCtrl',
            //controllerAs: 'vm'
        }).
        otherwise({
            redirectTo: '/main'
        });

        $httpProvider.defaults.headers.common["X-Requested-With"] = 'XMLHttpRequest';

    }]).controller('customerCtrl', customerCtrl);

WebSecurityConfig.java

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Autowired
    private UserDetailsService userDetailsService;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .csrf().disable()
            .authorizeRequests()
                .antMatchers("/", "/customer.html", "/index.html", "/main.html", "/*.js", "/user", "/logout").permitAll()
                .anyRequest().authenticated()
                .and()
            .formLogin()
                .loginPage("/customer.html")
                .permitAll()
                .and()
            .httpBasic()
                .and()
            .logout()
                .permitAll();
    }

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService);
    }
}

.formLogin()
                    .loginPage("/customer.html")
                    .permitAll()
                    .and()

где я столкнулся с проблемой.

Когда пользователь пытается достичь страницы, требующей входа на угловую страницу, она отлично работает и перенаправляется на правильный маршрут, который у меня есть как/#/клиент. Однако, когда вы пытаетесь достичь не угловой страницы, которая не находится в матчи, так /asdfasdf, она идет на необработанную html-страницу, а не на угловой маршрут.

Мне интересно, есть ли способ заставить WebSecurityConfig работать с угловыми маршрутами? А если нет, то каков способ исправить это?

Теги:
spring-security
spring

1 ответ

0

Я думаю, вы можете настроить в web.xml нечто похожее на маршрут страницы, не найденной на существующей странице, например, на странице входа

<error-page>
  <error-code>404</error-code>
  <location>/index.html</location>
</error-page>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню