Grails (バージョン3.1.7)で私の最初のステップを実行しています。私はユーザ認証が必要なアプリケーションを実行しています。このアプリは、いくつかのREST機能を提供するWebアプリケーションです。そのため、Webログインとトークンによる「残りのログイン」が必要です。Grails 3.1.7 GORM Scaffoldingによる新しいユーザの作成時のSpringセキュリティの問題
私は春・セキュリティ・コアを使用しています:3.1.0と春-セキュリティ残り:2.0.0.M2これらについてを提案し、両方のログインが正常に動作しています。
grails generate-all package.User
で生成されたCRUDを使用して新しいユーザーを作成しようとすると、私はいくつかの問題を抱えています。ビューを正しく生成しました(ユーザーが持つことができるクライアントクラスがあります。クライアントが1人のユーザーのみを持つことができるため、同じ作成セクションにクライアントフィールドを提供してください)。 URI/ウェブ/ WEBUSER/を保存、中メッセージヌル
クラスjava.lang.NullPointerExceptionが、
:私はそれを保存すると、私は内部サーバーエラー500を得ましたファイル:\ web \ WebUserController.groovy と行は次のとおりです。webUser.save flush:true
トレースは次のとおりです。
Line | Method
80 | doFilter in grails.plugin.springsecurity.rest.RestLogoutFilter
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 64 | doFilter in grails.plugin.springsecurity.web.UpdateRequestContextHolderExceptionTranslationFilter
| 53 | doFilter in grails.plugin.springsecurity.web.filter.GrailsAnonymousAuthenticationFilter
| 143 | doFilter in grails.plugin.springsecurity.rest.RestAuthenticationFilter
| 62 | doFilter in grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter
| 58 | doFilter in grails.plugin.springsecurity.web.SecurityRequestHolderFilter
| 1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
| 615 | run in java.util.concurrent.ThreadPoolExecutor$Worker
^ 745 | run . . . in java.lang.Thread
Caused by NullPointerException: null
->> 47 | $tt__save in WebUserController.groovy
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 96 | doInTransaction in grails.transaction.GrailsTransactionTemplate$2
| 93 | execute . in grails.transaction.GrailsTransactionTemplate
| 96 | doInTransaction in grails.transaction.GrailsTransactionTemplate$2
| 93 | execute . in grails.transaction.GrailsTransactionTemplate
| 80 | doFilter in grails.plugin.springsecurity.rest.RestLogoutFilter
| 64 | doFilter in grails.plugin.springsecurity.web.UpdateRequestContextHolderExceptionTranslationFilter
| 53 | doFilter in grails.plugin.springsecurity.web.filter.GrailsAnonymousAuthenticationFilter
| 143 | doFilter in grails.plugin.springsecurity.rest.RestAuthenticationFilter
| 62 | doFilter in grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter
| 58 | doFilter in grails.plugin.springsecurity.web.SecurityRequestHolderFilter
| 1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
| 615 | run . . . in java.util.concurrent.ThreadPoolExecutor$Worker
^ 745 | run in java.lang.Thread
私はセキュリティプラグインの設定や、ユーザーとクライアントのドメインクラスで、またはUserControllerでで間違った何かを持っているかどうかわからないです。
編集:Updete info!
@Transactional(読み取り専用=真)
クラスWebUserController {
static allowedMethods = [save: "POST", update: "PUT", delete: "DELETE"]
static namespace = 'web'
def springSecurityService
@Transactional
def save(WebUser webUser) {
if (webUser == null) {
transactionStatus.setRollbackOnly()
notFound()
return
}
if (webUser.hasErrors()) {
transactionStatus.setRollbackOnly()
respond webUser.errors, view:'create'
return
}
webUser.save flush:true // line where the NullPointerException is threw
if (webUser.isAdmin){
UserRole.create webUser, Role.findByAuthority('ROLE_ADMIN')
} else {
UserRole.create webUser, Role.findByAuthority('ROLE_CLIENT')
}
request.withFormat {
form multipartForm {
flash.message = message(code: 'default.created.message', args: [message(code: 'webUser.label', default: 'WebUser'), webUser.id])
redirect webUser
}
'*' { respond webUser, [status: CREATED] }
}
}
そしてDOMINにおけるコード:
transient springSecurityService
String username
String password
boolean enabled = true
boolean accountExpired
boolean accountLocked
boolean passwordExpired
static transients = ['isAdmin', 'springSecurityService']
boolean isAdmin
Client client
String name
String email
Date lastVisit
static hasMany = [orders: BOrder]
static constraints = {
username size: 5..15, blank: false, unique: true
password size: 5..15, blank: false, password: true
email email: true, blank: false, unique: true
name size: 0..50, nullable: true
lastVisit nullable: true
client nullable: true
}
クライアントがNULLかどうかのいずれかであるときにエラーが発生。 WebUserドメインクラスでafterInsertを追加するとデバッグできますが、nullではないにもかかわらずWebUser IDが生成されず、その時点でエラーメッセージが表示されない場合、クライアントIDが生成されます。
これはおそらくセキュリティとは関係なく、検証問題またはデータバインディング問題のいずれかです。ユーザーを作成するコードを表示できますか? –
@BurtBeckwith私は月曜日にそれを見ることができます。なぜなら今は私が就職していないからです。しかし、そのほとんどは、コマンド、プラグインのs2-quickstartコマンドを持つドメイン、grails generate-allを持つコントローラで生成されます。ドメインでは、クライアントクライアント(2つのプロパティを持つDomainクラス)と、この参照をnullableとしてクライアントに設定する制限を追加しました。この情報が十分でない場合は、月曜日にさらにコードを追加できます!コメントありがとう! –
'47行目にNPEがあります。 $ tt__save in WebUserController.groovy'コントローラには、その行に正確に何が入っていますか?与えられた部分だけでなく、メソッドコード全体を共有できますか? – droggo