重定向到 java 网络应用程序后无法获取 AuthenticationResult

Unable to get the AuthenticationResult after redirecting to java web-app

我正在尝试使用 openidconnect 方法将 azure ad 集成到 java 网络应用程序中。我的 web 应用程序部署在 weblogic 应用程序服务器上。

参考:microsoft doc

我使用的基本代码来自微软github repo:Link

集成后,我能够将我的登录页面重定向到 Microsoft 登录页面,输入凭据,然后当 Microsoft 重定向回我的登录页面时,它位于控制器下方,这是我的重定向回复 URL,这里的结果对象 (AuthenticationResult) 为空。会话对象似乎没有名为 'principle' 的属性。我不确定我哪里出错了,谁能给我指出正确的方向?

@Controller
@RequestMapping("/jsp/MyClientControllerServlet")
public class AadController {
    
    
    private static Logger logger = Logger.getLogger(AadController.class);
    @RequestMapping(method = { RequestMethod.GET, RequestMethod.POST })
    public String getDirectoryObjects(ModelMap model, HttpServletRequest httpRequest) {
        logger.info("Starting getDirectoryObjects");
        HttpSession session = httpRequest.getSession();
        logger.info("session: "+session);
        //The principle session name variable has the string 'principle'. 
        //I am not sure if this is a static attribute that applies to all applications.
        //I guess this attribute is not available on my HttpSession which is why my AuthenticationResult is null
        AuthenticationResult result = (AuthenticationResult) session.getAttribute(AuthHelper.PRINCIPAL_SESSION_NAME);
        if (result == null) {
            model.addAttribute("error", new Exception("AuthenticationResult not found in session."));
            return "/error";
        } else {
            System.out.println("Login session success");

更新#1:我试图通过枚举来打印我的 HttpSession 的内容,我发现它只有一个名为 'states' 的属性,它也是空的。

来自我的日志:

INFO  BasicFilter:81 - doFilter
INFO  BasicFilter:134 - processAuthenticationData
INFO  AuthenticationAuthority:149 - [Correlation ID: 546546454-18e3-499e-8cc9-0ABCDf3a3584] Instance discovery was successful
DEBUG DispatcherServlet:693 - DispatcherServlet with name 'mvc-dispatcher' processing POST request for [/myPortal/jsp/MyClientControllerServlet]
DEBUG DefaultAnnotationHandlerMapping:221 - Mapping [/jsp/MyClientControllerServlet] to HandlerExecutionChain with handler [com.microsoft.aad.adal4jsample.AadController@50f6da2b] and 2 interceptors
DEBUG HandlerMethodInvoker:173 - Invoking request handler method: public java.lang.String com.microsoft.aad.adal4jsample.AadController.getDirectoryObjects(org.springframework.ui.ModelMap,javax.servlet.http.HttpServletRequest)
INFO  AadController:54 - Starting getDirectoryObjects
INFO  AadController:56 - session: weblogic.servlet.internal.session.MemorySessionData@17d119dd
INFO  AadController:61 - states : {}

更新 #2: 我尝试通过枚举来打印 HttpServletRequest 对象的属性,其中一个属性称为 error,它具有此值。

INFO  AadController:81 - error : com/nimbusds/jose/shaded/json/parser/ParseException

按照@Allen Wu 的建议添加更多日志后,我终于能够获得一个明显的堆栈跟踪:

Caused by: java.lang.UnsupportedClassVersionError: com/nimbusds/jose/shaded/json/parser/ParseException : Unsupported major.minor version 52.0

nimbusds site 说他们的最新版本支持 JDK 7+ 版本,但最新的 jar 版本 9.9.3 仅支持 JDK 8+,因此出现上述错误。在我更换为 7.8 版本(随机选择较低版本)后,应用程序立即运行。

<dependency>
    <groupId>com.nimbusds</groupId>
    <artifactId>nimbus-jose-jwt</artifactId>
    <version>7.8</version>
</dependency>