我有一个页面应用程序客户端使用AngularJS,而服务器端则使用Spring、REST、Spring .When应用程序部署。spring呈现一个JS页面,该页面具有与页面各个部分对应的角JS标记,如页眉、页脚、菜单和主要内容区域。
Dispatcher servlet将url映射为/ui*。我唯一的spring控制器将自己呈现给home.jsp。home.jsp有多个名为angularJS的ui视图标记,如下所述。路由被定义为在controller.js中。web.xml如下所示。有无数REST用于使用进行CRUD操作。
我想使用Spring安全和Java配置来保护这个应用程序。
我正在尝试SecurityConfiguration.java文件中如下所示的代码,以允许在没有身份验证的情况下呈现登录页面&其他页面必须是浏览器的authenticated.before访问。登录页面应该是应用程序的唯一入口点。但是,此代码不起作用。请给我建议。
注意事项 :-这是一个单一页面应用程序。App只有一个SpringMVC控制器&当我们根据配置在angularJS应用程序中的路由访问url (http://localhost:8080/root/ui/login)时,它呈现应用程序中的Home.jsp.Post部署。url更改为使用碎片牙本质作为呈现Login页面的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和用于UI的Dispatcher servlet的url模式。
<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的RESTFUL。Spring数据mongodb用于mongodb上的CRUD。
发布于 2016-05-06 20:57:35
您需要将类似的内容添加到配置链中。
http.httpBasic()
.and()
.authorizeRequests()
.antMatchers("/root/ui/**").permitAll()
.anyRequest().authenticated();https://stackoverflow.com/questions/37078998
复制相似问题