1+ package org .javaee7 .jaspic .invoke .sam ;
2+
3+ import static java .util .logging .Level .SEVERE ;
4+ import static javax .security .auth .message .AuthStatus .SEND_SUCCESS ;
5+ import static javax .security .auth .message .AuthStatus .SUCCESS ;
6+
7+ import java .io .IOException ;
8+ import java .util .Map ;
9+ import java .util .logging .Logger ;
10+
11+ import javax .enterprise .inject .spi .CDI ;
12+ import javax .naming .InitialContext ;
13+ import javax .security .auth .Subject ;
14+ import javax .security .auth .callback .Callback ;
15+ import javax .security .auth .callback .CallbackHandler ;
16+ import javax .security .auth .callback .UnsupportedCallbackException ;
17+ import javax .security .auth .message .AuthException ;
18+ import javax .security .auth .message .AuthStatus ;
19+ import javax .security .auth .message .MessageInfo ;
20+ import javax .security .auth .message .MessagePolicy ;
21+ import javax .security .auth .message .callback .CallerPrincipalCallback ;
22+ import javax .security .auth .message .callback .GroupPrincipalCallback ;
23+ import javax .security .auth .message .module .ServerAuthModule ;
24+ import javax .servlet .http .HttpServletRequest ;
25+ import javax .servlet .http .HttpServletResponse ;
26+
27+ import org .javaee7 .jaspic .invoke .bean .CDIBean ;
28+ import org .javaee7 .jaspic .invoke .bean .EJBBean ;
29+
30+ /**
31+ *
32+ * @author Arjan Tijms
33+ *
34+ */
35+ public class TestServerAuthModule implements ServerAuthModule {
36+
37+ private final static Logger logger = Logger .getLogger (TestServerAuthModule .class .getName ());
38+
39+ private CallbackHandler handler ;
40+ private Class <?>[] supportedMessageTypes = new Class [] { HttpServletRequest .class , HttpServletResponse .class };
41+
42+
43+
44+ @ Override
45+ public void initialize (MessagePolicy requestPolicy , MessagePolicy responsePolicy , CallbackHandler handler ,
46+ @ SuppressWarnings ("rawtypes" ) Map options ) throws AuthException {
47+ this .handler = handler ;
48+ }
49+
50+ @ Override
51+ public AuthStatus validateRequest (MessageInfo messageInfo , Subject clientSubject , Subject serviceSubject ) throws AuthException {
52+
53+ HttpServletRequest request = (HttpServletRequest ) messageInfo .getRequestMessage ();
54+ HttpServletResponse response = (HttpServletResponse ) messageInfo .getResponseMessage ();
55+
56+ if ("cdi" .equals (request .getParameter ("tech" ))) {
57+ callCDIBean (response , "validateRequest" );
58+ } else if ("ejb" .equals (request .getParameter ("tech" ))) {
59+ callEJBBean (response , "validateRequest" );
60+ }
61+
62+ try {
63+ handler .handle (new Callback [] {
64+ new CallerPrincipalCallback (clientSubject , "test" ),
65+ new GroupPrincipalCallback (clientSubject , new String [] { "architect" })
66+ });
67+
68+ return SUCCESS ;
69+
70+ } catch (IOException | UnsupportedCallbackException e ) {
71+ throw (AuthException ) new AuthException ().initCause (e );
72+ }
73+ }
74+
75+ private void callCDIBean (HttpServletResponse response , String phase ) {
76+ try {
77+ CDIBean cdiBean = CDI .current ().select (CDIBean .class ).get ();
78+ response .getWriter ().write (phase + ": " + cdiBean .getText ());
79+ } catch (Exception e ) {
80+ logger .log (SEVERE , "" , e );
81+ }
82+ }
83+
84+ private void callEJBBean (HttpServletResponse response , String phase ) {
85+ try {
86+ EJBBean ejbBean = (EJBBean ) new InitialContext ().lookup ("java:module/EJBBean" );
87+ response .getWriter ().write (phase + ": " + ejbBean .getText ());
88+ } catch (Exception e ) {
89+ logger .log (SEVERE , "" , e );
90+ }
91+ }
92+
93+
94+ @ Override
95+ public Class <?>[] getSupportedMessageTypes () {
96+ return supportedMessageTypes ;
97+ }
98+
99+ @ Override
100+ public AuthStatus secureResponse (MessageInfo messageInfo , Subject serviceSubject ) throws AuthException {
101+ return SEND_SUCCESS ;
102+ }
103+
104+ @ Override
105+ public void cleanSubject (MessageInfo messageInfo , Subject subject ) throws AuthException {
106+
107+ }
108+
109+
110+ }
0 commit comments