首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用AntMatchers和Spring安全性的SinglePage应用程序所需的AngularJS

使用AntMatchers和Spring安全性的SinglePage应用程序所需的AngularJS
EN

Stack Overflow用户
提问于 2016-05-06 18:20:00
回答 1查看 1K关注 0票数 1

我有一个页面应用程序客户端使用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,以便可以不安全地访问登录页,而其他页面则需要对其访问进行身份验证。

安全配置代码如下所示:- (请用此处的代码通知)

代码语言:javascript
复制
<code>
http.csrf().disable().httpBasic()
      .and()
      .authorizeRequests()
      .antMatchers("/ui/login#/login").permitAll()
      .antMatchers("/ui/login#/chDetail").authenticated();
</code>

应用程序其他层的代码片段如下所示,以供参考。Home.jsp代码如下所示。

代码语言:javascript
复制
 <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>

路由控制器代码如下。

代码语言:javascript
复制
<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模式。

代码语言:javascript
复制
 <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控制器是

代码语言:javascript
复制
 @Controller
 @RequestMapping("/login")
 public class ChController {

 @RequestMapping(method = RequestMethod.GET)
 public String getListingPage() {
      return "HomePage";
 }
 }

此外,还有很多使用Apache的RESTFUL。Spring数据mongodb用于mongodb上的CRUD。

EN

回答 1

Stack Overflow用户

发布于 2016-05-06 20:57:35

您需要将类似的内容添加到配置链中。

代码语言:javascript
复制
 http.httpBasic()
  .and()
  .authorizeRequests()
  .antMatchers("/root/ui/**").permitAll()
  .anyRequest().authenticated();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37078998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档