SpringSecurityOAuth2授权码模式一直是个难点,不了解底层原理很难定位问题。今天的文章是针对这位朋友提出的问题的解答,分为以下三个部分:重新自定义授权码模式的登录页面重新自定义授权码模式的授权页面重新自定义异常页面授权码模式重新自定义授权码模式重新自定义登录页面下面是默认登录页面的样子,如下图:是不是有点丑?在实际开发中,必须根据自己的系统自定义这个登录页面。问题来了:如何定制?分为以下几个步骤:1.自定义页面Chen随机找了一个前端页面oauth-login.html,代码如下:使用thymeleaf进行渲染。2、定义接口跳转,需要在OAuth2授权服务中定义一个接口跳转到自定义页面。接口如下:@ApiOperation(value="表单登录跳转页面")@GetMapping("/oauth/login")publicStringloginPage(Modelmodel){//返回跳转页面return"oauth-login";}3、SpringSecurity中的配置只需要在SpringSecurity的formlogin中定义跳转接口即可,代码如下:代码解释如下:loginProcessingUrl:这是定义的form表单提交的url。.loginPage:这是定义重定向登录页面的url。按照以上三步,可以轻松实现自定义登录页面,效果如下:重新自定义授权码方式的授权页面下面展示默认的授权页面长什么样子,如图下图:那么如何定制呢?这个定制是比较麻烦的,需要对SpringSecurity的底层原理有一定的了解。1.Chen在自定义页面随便找了一个页面oauth-grant.html,代码如下:2.定义跳转到授权页面的接口的重定向接口url:/oauth/confirm_access,这个接口是定义在org.springframework.security.oauth2.provider.endpoint.WhitelabelApprovalEndpoint中,如下:自定义也很简单,只需要模仿这个接口自定义一个覆盖即可,实现如下:注:@SessionAttributes("authorizationRequest")这个注解必须标注,授权请求信息保存在session中。3、修改默认映射地址由于默认的跳转接口是:/oauth/confirm_access,而Chen定义的接口也是/oauth/confirm_access,所以这第3步不用配置也能生效。注意:如果你的跳转接口不是/oauth/confirm_access,需要按照这一步配置。修改也很简单。只需要修改OAuth2认证服务的配置类中的配置:继承AuthorizationServerConfigurerAdapter的配置。代码如下:按照以上三步轻松定制授权页面。效果如下:Authorizationcodemode重新自定义异常页面是什么意思?授权码的请求URL如下:http://localhost:9001/blog-auth-server/oauth/authorize?client_id=mugu&response_type=code&scope=all&redirect_uri=http://www。baidu.com假设我将租户id(client_id)改成数据库中不存在的值,那么就会出现异常页面,页面如下:Doesthisexceptionpagenotmeettherequirementsofthesystem,它必须是定制的。1.陈某自定义页面前端能力有限,找不到现成的,于是随便写了一个oauth-error.html,代码如下:2.定义界面跳转逻辑这个跳转接口的of在AuthorizationEndpoint中,如下:所以只需要重新定义一个接口进行跳转,如下:@ApiOperation(value="跳转处理授权异常的页面")@GetMapping("/oauth/error")publicStringerror(Modelmodel){return"oauth-error";}3.修改默认映射地址。默认的映射地址是/oauth/error,这也是Chen自定义的,所以第3步可以省略。注意:如果你定义的接口不是/oauth/error,你需要配置它。》修改也很简单,只需要在OAuth2认证服务的配置类中修改配置:继承AuthorizationServerConfigurerAdapter的配置即可。代码如下:按照以上三步即可轻松自定义异常页面。效果如下:
