我已经使用以下值生成了一个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
文件,以便在configure(HttpSecurity http)
方法中为authorizeRequests()
添加permitAll(HttpMethod.GET,"/**")
。在尝试访问实体时,我仍然会被引导到accessdenied
。
以前有人处理过这个用例吗?
这是针对AngularJS 1.x 的
用于访问资源:在SecurityConfiguration.java
中的configure(HttpSecurity http)
方法
.and()
.authorizeRequests()
.antMatchers(HttpMethod.GET, "/api/**").permitAll()
对于访问角度视图/状态:对于每个图元,注释掉或删除只读状态的authorities
特性。下面是src/main/webapp/app/entities/book/book.state.js
中Book
实体的示例:
.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隐藏它们
同意@Gaël Marziou的观点,但我认为与其允许所有人都使用GET/api,不如添加新的前缀,如
/公共
和授权:
.antMatchers("/public/**").permitAll()
对于所有公共api来说,看起来可能更好