我有一个单页应用程序客户端使用AngularJS而服务器端使用Spring MVC,REST,Spring Data。当应用程序部署时,spring mvc呈现一个JSP页面,该页面具有多个名为ui-view的角度JS标记,对应于页面的各个部分作为页眉,页脚,菜单和主要内容区域。
Dispatcher servlet将url映射为/ ui *。我唯一的Spring MVC控制器将自己呈现给home.jsp。 home.jsp具有多个名为angularJS ui-view的标签,如下所述。路由定义为controller.js。 web.xml如下所示。使用Spring数据mongodb的CRUD操作有无数的REST API。
我想使用带有Java配置的Spring安全性保护此应用程序。
我正在我的SecurityConfiguration.java文件中尝试下面的代码,以允许在没有身份验证的情况下呈现登录页面。在浏览器访问之前,必须对其他页面进行身份验证。登录页面应该是应用程序的唯一入口点。但是这段代码不起作用。 请指教。
注意: - 这是单页应用程序。 App只有一个SpringMVC控制器&当我们访问url(http://localhost:8080/root/ui/login)时,它在应用程序Home.jsp.Post部署中呈现singleJSP 根据angularJS应用程序中配置的路由,url更改为使用fragmentidentifier作为url(http://localhost:8080/root/ui/login#/login) 这将呈现登录页面。 单击任何其他超链接时,只有片段标识符发生更改并对DB进行REST调用,并填充页面特定部分的数据。对于Ex: - 单击chDetail超链接时,URL更改如下(http://localhost:8080/root/ui/login#/chDetail)并加载该部分的数据。请告知如何编写适当的antMatchers 可以不安全地访问登录页面,而其他页面需要通过身份验证才能访问。
安全配置代码如下: - (请在此处提供代码建议)
<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'
},
'footer@root': {
templateUrl:'resources/html/footer.html'
},
'header@root': {
templateUrl:'resources/html/header.html'
},
'userStatus@root': {
templateUrl:'resources/html/userStatus.html'
},
'menu@root': {
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>
web.xml如下所示,为REST和cxfservlet定义了url模式 用于UI的Dispatcher servlet。
<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控制器
@Controller
@RequestMapping("/login")
public class ChController {
@RequestMapping(method = RequestMethod.GET)
public String getListingPage() {
return "HomePage";
}
}
此外还有许多使用Apache-cxf的RESTFUL API。 Spring数据Mongo-db用于mongodb上的CRUD。
答案 0 :(得分:1)
您需要在配置链中添加类似的内容。
http.httpBasic()
.and()
.authorizeRequests()
.antMatchers("/root/ui/**").permitAll()
.anyRequest().authenticated();