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+ @ Override
76+ public Class <?>[] getSupportedMessageTypes () {
77+ return supportedMessageTypes ;
78+ }
79+
80+ @ Override
81+ public AuthStatus secureResponse (MessageInfo messageInfo , Subject serviceSubject ) throws AuthException {
82+
83+ HttpServletRequest request = (HttpServletRequest ) messageInfo .getRequestMessage ();
84+ HttpServletResponse response = (HttpServletResponse ) messageInfo .getResponseMessage ();
85+
86+ if ("cdi" .equals (request .getParameter ("tech" ))) {
87+ callCDIBean (response , "secureResponse" );
88+ } else if ("ejb" .equals (request .getParameter ("tech" ))) {
89+ callEJBBean (response , "secureResponse" );
90+ }
91+
92+ return SEND_SUCCESS ;
93+ }
94+
95+ @ Override
96+ public void cleanSubject (MessageInfo messageInfo , Subject subject ) throws AuthException {
97+
98+ HttpServletRequest request = (HttpServletRequest ) messageInfo .getRequestMessage ();
99+ HttpServletResponse response = (HttpServletResponse ) messageInfo .getResponseMessage ();
100+
101+ if ("cdi" .equals (request .getParameter ("tech" ))) {
102+ callCDIBean (response , "cleanSubject" );
103+ } else if ("ejb" .equals (request .getParameter ("tech" ))) {
104+ callEJBBean (response , "cleanSubject" );
105+ }
106+ }
107+
108+ private void callCDIBean (HttpServletResponse response , String phase ) {
109+ try {
110+ CDIBean cdiBean = CDI .current ().select (CDIBean .class ).get ();
111+ response .getWriter ().write (phase + ": " + cdiBean .getText ());
112+ } catch (Exception e ) {
113+ logger .log (SEVERE , "" , e );
114+ }
115+ }
116+
117+ private void callEJBBean (HttpServletResponse response , String phase ) {
118+ try {
119+ EJBBean ejbBean = (EJBBean ) new InitialContext ().lookup ("java:module/EJBBean" );
120+ response .getWriter ().write (phase + ": " + ejbBean .getText ());
121+ } catch (Exception e ) {
122+ logger .log (SEVERE , "" , e );
123+ }
124+ }
125+
126+
127+ }
0 commit comments