2017-09-29 6 views
0

Ich versuche zu verstehen, wo @DeclareRoles Annotation verwendet werden kann. Die API sagt einfach:Ist @DeclareRoles auf Java-Servlet-Klassen beschränkt?

Wird von der Anwendung verwendet, um Rollen zu deklarieren. Es kann in einer Klasse angegeben werden.

I @DeclareRoles erfolgreich mit Glassfish und Payara und für sie verwendet haben, kann ich @DeclareRoles überall setzen; Es scheint, dass diese EE-Server alle Verwendungen scannen und finden werden. Ich habe versucht, Code an WebLogic 12.2.1 zu übertragen und habe bei der Bereitstellung einige Rollenfehler erhalten. Ich habe das Problem verfolgt, bis WebLogic die Annotation @DeclareRoles nur für eine Servlet-Klasse wollte.

Also sollte @DeclareRoles in der Lage sein, jede Klasse anzuziehen und das GlassFish/Payara-Verhalten ist korrekt? Oder sollte @DeclareRoles nur auf eine Servlet-Klasse beschränkt sein und das WebLogic-Verhalten ist korrekt. Angesichts der Geschichte von WebLogic glaube ich, dass es nicht das Richtige tut.

Antwort

0

Gemäß der Java EE 7.0 & 8.0 Spezifikationen müssen javax.annotation.security.DeclareRoles nur von Webcontainern und EJB-Containern unterstützt werden.

Mit anderen Worten, die Klasse, die annotiert ist, muss ein EJB oder ein Servlet sein.

0

Nachdem in dieser mehr suchte, fand ich JSR-340, Servlets 3.1-Spezifikation, Abschnitt 15.5.1 und JSR-369, Servlet 4.0-Spezifikation, Abschnitt 15.2.2 beide Zustand:

Die @DeclareRoles Annotation kann nur in den Klassen definiert werden, die die javax.servlet.Servlet-Schnittstelle oder eine Unterklasse implementieren.

Es sieht also so aus, als ob WebLogic das richtig verstanden hat und das GlassFish/Payara-Verhalten außerhalb der Spezifikation liegt.

+0

Denken Sie daran, dass Ihre Webanwendung möglicherweise EJBs enthält, die auch diese Anmerkung haben können –

+0

Ja, danke für die Erinnerung. –

Verwandte Themen