Controller :
@RestController
@RequestMapping("/saml")
public class TestController {
private final SAML2Client saml2Client;
private SAML2Profile userProfile;
public TestController(SAML2Client saml2Client) {
this.saml2Client = saml2Client;
}
@GetMapping("/metadata")
public String metadata() throws IOException {
return saml2Client.getServiceProviderMetadataResolver().getMetadata();
}
@RequestMapping("/login")
public void login(HttpServletRequest request, HttpServletResponse response) {
JEEContext context = new JEEContext(request, response);
Optional<RedirectionAction> redirect = saml2Client.redirect(context);
redirect.ifPresent((action) -> JEEHttpActionAdapter.INSTANCE.adapt(action, context));
}
@RequestMapping
public String sso(HttpServletRequest request, HttpServletResponse response) {
JEEContext context = new JEEContext(request, response);
try {
Optional<SAML2Credentials> credentials = saml2Client.getCredentials(context);
SAML2Credentials saml2Credentials = credentials.orElseThrow();
userProfile = (SAML2Profile) saml2Credentials.getUserProfile();
return "success: " + userProfile.getId() + "\n NotAfter: " + userProfile.getNotOnOrAfter().toString();
} catch (RedirectionAction action) {
JEEHttpActionAdapter.INSTANCE.adapt(action, context);
return null;
}
}
@RequestMapping("/logout")
public void logout(HttpServletRequest request, HttpServletResponse response) {
JEEContext context = new JEEContext(request, response);
SAML2Profile saml2Profile = new SAML2Profile() {
@Override
public String getSessionIndex() {
return userProfile.getSessionIndex();
}
@Override
public String getId() {
return userProfile.getId();
}
};
Optional<RedirectionAction> redirect = saml2Client.getLogoutAction(context, saml2Profile, null);
redirect.ifPresent((action) -> JEEHttpActionAdapter.INSTANCE.adapt(action, context));
}
@RequestMapping("/logout-success")
public String logoutSuccess() {
return "logout success";
}
}
*Thanks and regards*
*Vikas Ahlawat*