当前位置: 首页 > 知识库问答 >
问题:

Spring Security SAML SSO重定向到控制器

施恩
2023-03-14

在IDP启动的设置中使用代码片段重定向到控制器(/bootstrap/v1):

public SavedRequestAwareAuthenticationSuccessHandler successRedirectHandler() {
    SavedRequestAwareAuthenticationSuccessHandler successRedirectHandler = new SavedRequestAwareAuthenticationSuccessHandler();
    successRedirectHandler.setDefaultTargetUrl("/bootstrap/v1");
    return successRedirectHandler;
}

控制器代码片段:

public class BootstrapController extends ParentController {

    @RequestMapping(value = "/v1", method = RequestMethod.POST)
    public ResponseEntity<BootstrapResponseDto> bootstrap(@RequestBody BootstrapRequestDto bootstrapRequestDto, @RequestHeader(value = "MAC-ADDRESS", required = false) String macAddress) {

        myAppUserDetails userDetails = SecurityContextUtils.getUserDetails();

        BootstrapResponseDto bootstrapResponseDto = new BootstrapResponseDto();

        // some app specific logic goes here...

        return new ResponseEntity<>(bootstrapResponseDto, HttpStatus.OK);
    }
}

调试级日志片段:

安全筛选器链:[MetadataGeneratorFilter
WebSyncManagerIntegrationFilter SecurityContextPersistenceFilter
CustomLogFilter HeaderWriterFilter LogoutFilter
UsernamePasswordAuthenticationFilter BasicAuthenticationFilter
FilterChainProxy RequestCacheawareFilter
SecurityContextHolderRequestFilter
AnonymousAuthenticationFilter SessionManagementFilter

11-29-2018 13:33:53 e7a5edb2-4051-4132-bad0-856d58af1c7d信息http-nio-8080-exec-6 O.O.C.B.S.SamlProtocolMessageXMLSignatureSecurityPolicyRule:验证协议消息签名成功,消息类型:{urn:Oasis:Names:TC:SAML:2.0:protocol}响应11-29-2018 13:33:53 e7a5edb2-4051-4132-bad0-856d58af1c7d

收到GET“/bootstrap/v1”得请求:

org.springframework.session.web.http.sessionrepositoryfilter$sessionrepositoryrequestwrapper@5f9e2aff

servletpath:/bootstrap/v1 pathinfo:null headers:host:localhost:8080 user-agent:mozilla/5.0(Macintosh;Intel Mac OS X 10.13;rv:63.0)gecko/20100101 firefox/63.0接受:text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8接受-语言:en-US,en;q=0.5接受-编码:gzip,deflate dnt:1连接:keep-alive cookie:

安全筛选器链:[MetadataGeneratorFilter
WebSyncManagerIntegrationFilter SecurityContextPersistenceFilter
CustomLogFilter HeaderWriterFilter LogoutFilter
UsernamePasswordAuthenticationFilter BasicAuthenticationFilter
FilterChainProxy RequestCacheawareFilter
SecurityContextHolderRequestFilter
AnonymousAuthenticationFilter SessionManagementFilter

11-29-2018 13:33:53 e7a5edb2-4051-4132-bad0-856d58af1c7d警告http-nio-8080-exec-7 O.S.W.S.PageNotFound:不支持请求方法“Get”

ExpiringUsernameAuthenticationToken设置为返回:

HTTP状态405-方法不允许错误

共有1个答案

厍彭薄
2023-03-14

我相信这个问题与SAML一点关系都没有,而是一个通用的Spring Security问题。而且,您没有指定BootstrapRequestDto主体的来源。

您有一个SuccessHandler,它执行重定向

SuccessRedirectHandler.SetDefaultTargetURL(“/bootstrap/v1”);执行获取

public class BootstrapController extends ParentController {

    @RequestMapping(value = "/v1", method = RequestMethod.GET)
    public ResponseEntity<BootstrapResponseDto> bootstrap() {

        myAppUserDetails userDetails = SecurityContextUtils.getUserDetails();
        BootstrapResponseDto bootstrapResponseDto = new bootstrapResponseDto();

        // some app specific logic goes here...
        return new ResponseEntity<>(bootstrapResponseDto, HttpStatus.OK);
    }

    @RequestMapping(value = "/v1", method = RequestMethod.POST)
    public ResponseEntity<BootstrapResponseDto> bootstrap(@RequestBody BootstrapRequestDto bootstrapRequestDto, @RequestHeader(value = "MAC-ADDRESS", required = false) String macAddress) {

        myAppUserDetails userDetails = SecurityContextUtils.getUserDetails();

        BootstrapResponseDto bootstrapResponseDto = new BootstrapResponseDto();

        // some app specific logic goes here...

        return new ResponseEntity<>(bootstrapResponseDto, HttpStatus.OK);
    }
}
 类似资料:
  • 我是一个使用ASP.NET MVC5的新手。我需要对控制器进行Jquery调用,以返回一个传递单个参数的新视图。我可以看到很多类似MVC3和之前版本的例子,但却很难找到任何处理MVC4或MVC5并起作用的例子。我所要做的就是从输入元素获取一个值,将其传递给控制器ActionResult,然后打开一个新视图。 PageTwo是视图,Home是控制器。 我试过的代码(包括许多其他代码)通常在404:

  • 问题内容: 我想在JavaFX TextArea中显示控制台输出…不幸的是,我找不到JavaFX的任何有效示例,而只能找到Java Swing的实例,在我看来,这似乎不起作用。 编辑: 我尝试遵循以下示例:http : //unserializableone.blogspot.ch/2009/01/redirecting-systemout-and-systemerr- to.html 并扩展了我

  • 我希望将名为bash的进程的stdout重定向到supervisor控制台,以便在启动supervisor时使用 命令,我可以看到子进程日志。我怎么能这么做?我尝试将syslog用于stdout_logfile属性,但它不起作用。

  • 我正在构建一个URL缩短器,并正在研究“跟随方法”(follow method)——例如short。李/?存根=dishpods应重定向到https://www.amazon.com/gp/product/B07CTQ8THP/ref=ppx_yo_dt_b_asin_title_o00_s00?ie=UTF8 如何在我的控制器中设置这个自动重定向?我能想到的最好的办法是打印到控制台,但我希望它能

  • 我遇到的一个案例是,我必须将链接重定向到来自特定控制器的外部url。我试过很多案例,比如 也试过这样的东西 也尝试将返回类型作为模型和视图发送。但什么都不管用。谁能帮我解决这个问题吗。我看到许多人建议使用sendRedirect和setHeader方法,但在我的案例中,这两种方法行不通。所以我也想知道是否有任何配置可以用于使用这些HTTPServeletResponse的方法。

  • 问题内容: 假设我有一个用于编辑Pony属性的表单,并且在我的Web应用程序中有多个位置可以选择编辑Pony。例如,在小马列表中,每个小马旁边可能都有一个“编辑”链接,并且当用户查看小马时,该视图中也可能有“编辑”链接。 当用户在编辑Pony后单击“提交”时,我想使用户返回他或她单击“编辑”链接时所在的页面。 如何编写控制器以将用户重定向回他们开始的地方?当然,我可以通过向控制器传递参数来做到这一