JHipster:允许匿名用户读取实体,但不更新?

时间:2016-04-27 20:12:34

标签: java spring-security jhipster

我使用这些值生成了一个JHipster应用程序:

{
  "generator-jhipster": {
    "jhipsterVersion": "3.1.0",
    "baseName": "app",
    "packageName": "my.app",
    "packageFolder": "my/app",
    "serverPort": "8080",
    "authenticationType": "session",
    "hibernateCache": "ehcache",
    "clusteredHttpSession": "no",
    "websocket": "no",
    "databaseType": "sql",
    "devDatabaseType": "h2Disk",
    "prodDatabaseType": "mysql",
    "searchEngine": "elasticsearch",
    "buildTool": "gradle",
    "enableSocialSignIn": false,
    "rememberMeKey": "",
    "useSass": true,
    "applicationType": "monolith",
    "testFrameworks": [],
    "jhiPrefix": "jhi",
    "enableTranslation": false
  }
 }

我想允许匿名用户查看实体,但不允许更新或删除该实体。我已尝试编辑生成的SecurityConfiguration.java文件,以便在permitAll(HttpMethod.GET,"/**")方法中为authorizeRequests()添加configure(HttpSecurity http)。在尝试访问实体时,我仍然被定向到accessdenied

之前有没有人解决过这个用例?

2 个答案:

答案 0 :(得分:5)

这适用于AngularJS 1.x

访问资源:SecurityConfiguration.java方法<{1}}中的configure(HttpSecurity http)

    .and()
        .authorizeRequests()
        .antMatchers(HttpMethod.GET, "/api/**").permitAll()

访问角度视图/状态:对于每个实体,注释掉或删除authorities属性以获得只读状态。下面是Booksrc/main/webapp/app/entities/book/book.state.js实体的示例:

    .state('book', {
        parent: 'entity',
        url: '/book',
        data: {
            // authorities: ['ROLE_USER'],
            pageTitle: 'monoApp.book.home.title'
        },
        ....
    })
    .state('book-detail', {
        parent: 'entity',
        url: '/book/{id}',
        data: {
            // authorities: ['ROLE_USER'],
            pageTitle: 'monoApp.book.detail.title'
        },

然而,要注意两件事:

  • 通过在SecurityConfiguration中使用此类模式,您还可以在/api/users公开您的用户。为每个实体添加permitAll()以便您完全控制所公开的内容(白名单方法)会更安全
  • 用户体验很差,因为您仍然会显示添加或删除实体的按钮。所以你可以用ng-hide隐藏它们

答案 1 :(得分:0)

同意 @Gaël Marziou,但我认为不是允许 permit all 到 GET /api,而是添加新的前缀,如

<块引用>

/公开

和授权:

.antMatchers("/public/**").permitAll()

对于所有公共 api 可能看起来更好