シングルページアプリケーションがあります。クライアント側はAngularJSを使用しますが、サーバー側はSpring MVC、REST、Springデータを使用します。アプリケーションのデプロイ時spring mvcは、ヘッダー、フッター、メニュー、メインコンテンツエリアとして、ページのさまざまなセクションに対応する複数の名前付きUIビューのJSタグ。AngularJSとSpringセキュリティを使用するSinglePageアプリケーションでAntMatcherが必要
DispatcherサーブレットのURLマッピングは/ ui *です。私の唯一のSpring MVCコントローラは、自分自身をhome.jspにレンダリングします。 home.jspには、以下に述べるように複数の名前付きangularJS ui-viewタグがあります。経路は、controller.jsのように定義されています。 web.xmlは次のようになります。 Springデータmongodbを使ったCRUD操作のための無数のREST APIがあります。
JavaアプリケーションでSpringセキュリティを使用してこのアプリケーションを保護したいと考えています。
私のSecurityConfiguration.javaファイルで以下のコードを試して、ログインページを認証せずにレンダリングできるようにしています。&他のページはブラウザからアクセスする前に認証する必要があります。ログインページはアプリケーションへの唯一のエントリポイントでなければなりません。しかし、このコードは機能しません。 お知らせください。
注:: - これはシングルページアプリケーションです。アプリケーションにはSpringMVCコントローラが1つしかありません& URL(http://localhost:8080/root/ui/login) にアクセスすると、angleJSアプリケーションで設定されたルートに基づいてurlが変更され、fragmentidentifierをURL(http://localhost:8080/root/ui/login#/login) として使用すると、アプリケーションはHome.jsp.PostアプリケーションのsingleJSPをレンダリングしますログインページがレンダリングされます。 他のハイパーリンクをクリックすると、フラグメント識別子のみが変更され、DBへのREST呼び出しが行われ、ページのその特定のセクションのデータが移入されます。例:chDetailのハイパーリンクをクリックすると、URLは以下のように変更され(http://localhost:8080/root/ui/login#/chDetail)、そのセクションのデータがロードされます。 ログインページは安全ではなく、他のページはアクセスのために認証される必要があるように、適切なantMatcherを書く方法を教えてください。
セキュリティの設定コードは以下の通りです: - アプリの他の層の(ここではコードをお知らせください)
<code>
http.csrf().disable().httpBasic()
.and()
.authorizeRequests()
.antMatchers("/ui/login#/login").permitAll()
.antMatchers("/ui/login#/chDetail").authenticated();
</code>
コードスニペットは、参考のために以下の通りです。 Home.jspコードは以下の通りです。
<code>
<body ng-app="bpApp" ui-view>
<script type="text/ng-template" id="applicationPagelayout.html">
<div class="grandContainer">
<div ui-view="header"></div>
<div class="menuSecCT">
<div ui-view="userStatus"></div>
<div ui-view="menu"></div>
</div>
<div class="mainContainer">
<div ui-view="content"></div>
</div>
<p ui-view="footer"></p>
</div>
</script>
</body>
</code>
ルーティングコントローラコードは次のとおりです。
<code>
bpApp.config(['$stateProvider','$urlRouterProvider',function($stateProvider, $urlRouterProvider) {
$urlRouterProvider.otherwise('/login');
$stateProvider.state('root', {
url: '',
abstract:true,
views: {
'': {
templateUrl: 'applicationPagelayout.html'
},
'[email protected]': {
templateUrl:'resources/html/footer.html'
},
'[email protected]': {
templateUrl:'resources/html/header.html'
},
'[email protected]': {
templateUrl:'resources/html/userStatus.html'
},
'[email protected]': {
templateUrl:'resources/html/menu.html'
}
}
}).state('root.chDetail', {
url: "/chDetail",
views:{
'content': {
templateUrl: "resources/html/chDetail.html",
controller: 'chDetailCtrl'
}
}
}).state('login', {
url: "/login",
controller: 'loginCtrl',
templateUrl: "resources/html/login.html"
});
}]);
</code>
その下にRESTおよびUIの ディスパッチャサーブレットのcxfservletのURLパターンを画定するようにweb.xmlがあります。プロジェクト内の
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/ws/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>dispatcherservlet</servlet-name>
<url-pattern>/ui/*</url-pattern>
</servlet-mapping>
のみspringmvcコントローラはRESTfulなAPIのApacheの-CXFを使用しているの
@Controller
@RequestMapping("/login")
public class ChController {
@RequestMapping(method = RequestMethod.GET)
public String getListingPage() {
return "HomePage";
}
}
さらにたくさんあります。 SpringデータMongo-dbはmongodbのCRUDに使用されます。
私はログインしています。localhost:8080/root/ui/loginまたはlocalhost:8080/root/ui/login /#loginというurlパターンのhtmlです。他のすべてのアプリケーションページは、次のURLのlocalhost:8080/root/ui/login#<>にあります。したがって、すべてのURLに適用できる/ root/ui **を指定した場合、したがって、その全てがアクセス可能であるか、または存在しない。 –
user3504187