当前位置: 首页 > news >正文

南阳专业网站排名推广北京代理注册记账公司

南阳专业网站排名推广,北京代理注册记账公司,wordpress企业商城模板,网站维护与推广前言 昨天配置完了过滤器#xff0c;权限检验#xff0c;基本的SpringSecurity功能已经配置的差不多了#xff0c;今天继续开发#xff0c;明天可能会暂停一天整理一下需求#xff0c;然后就进行CRUD了。 今日进度 补充SpringSecurity异常处理和全局异常处理器 详细操作… 前言 昨天配置完了过滤器权限检验基本的SpringSecurity功能已经配置的差不多了今天继续开发明天可能会暂停一天整理一下需求然后就进行CRUD了。 今日进度 补充SpringSecurity异常处理和全局异常处理器 详细操作 一、补充SpringSecurity异常处理器 当我们没有进行异常处理项目如果出现了问题我们很难排查同时进行异常处理后返回的数据就比较有规范可以让前端的开发看懂。 比如我们现在使用一个错误的密码进行登录Apifox显示403这对吗不太对因为403是用户未授权而我们这里是认证的问题应该返回401才正确。这就导致今天检查的时候找了好久最后才发现是密码写错了如果返回信息是401那不是就很快就发现问题了。因此异常处理还是很重要的。 在SpringSecurity中如果我们在认证或者授权的过程中出现了异常会被ExceptionTranslationFilter捕获到。在ExceptionTranslationFilter中会去判断是认证失败还是授权失败出现的异常。 ​ 如果是认证过程中出现的异常会被封装成AuthenticationException然后调用AuthenticationEntryPoint 对象的方法去进行异常处理返回401。 ​ 如果是授权过程中出现的异常会被封装成AccessDeniedException然后调用AccessDeniedHandler对象的方法去进行异常处理返回403。 ​ 所以如果我们需要自定义异常处理我们只需要自定义AuthenticationEntryPoint和AccessDeniedHandler然后配置给SpringSecurity即可。 听上去听复杂的但是实现并不复杂 只要重写AuthenticationException和AccessDeniedHandler方法并添加到配置中即可。 Component public class AuthenticationEntryPointImpl implements AuthenticationEntryPoint {Overridepublic void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException, ServletException {ResponseResult result new ResponseResult(HttpStatus.UNAUTHORIZED.value(), 用户认证失败请重新登录);String json JSON.toJSONString(result);WebUtils.renderString(response,json);} } Component public class AccessDeniedHandlerImpl implements AccessDeniedHandler {Overridepublic void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException accessDeniedException) throws IOException, ServletException {ResponseResult result new ResponseResult(HttpStatus.FORBIDDEN.value(), 权限不足);String json JSON.toJSONString(result);WebUtils.renderString(response,json);} } Overrideprotected void configure(HttpSecurity http) throws Exception {http//关闭csrf.csrf().disable()//不通过Session获取SecurityContext.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and().authorizeRequests()// 对于登录接口 允许匿名访问.antMatchers(/user/login).anonymous().antMatchers(/hello/**).hasRole(ADMIN)//对于/hello的路径只有ADMIN权限的用户才能访问.antMatchers(/ok/**).hasAnyRole(ADMIN,TEACHER)//对于/ok的路径ADMIN和USER权限的用户都可以访问// 除上面外的所有请求全部需要鉴权认证.anyRequest().authenticated();//添加自定义过滤器http.addFilterBefore(jwtAuthenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);//添加自定义异常处理http.exceptionHandling().authenticationEntryPoint(authenticationEntryPoint).accessDeniedHandler(accessDeniedHandler);} 这样我们进行测试就能很快的发现问题了如下图 二、全局异常处理 上面我们只进行了有关SpringSecurity的异常处理那要是其他地方出现异常怎么办所以我们要进行全局的异常处理。因为项目不太大所以这里使用了一个简单的全局异常处理要是后面项目实现功能很多的话可以考虑使用复杂完整的全局异常处理。 首先为了进行测试我们先编写两个异常方法一个是数组越界一个是除0 RequestMapping(/ok/t1)public int test1(){ListInteger integers new ArrayList();for (int i 0; i 10; i){integers.add(i);}//故意数组过界进行异常测试for (int i 0; i 20; i){System.out.println(integers.get(i));}return 1;}RequestMapping(/ok/t2)public int test2(){int t 10/0;System.out.println(t);return 1;} 接着编写一下全局异常类 RestControllerAdvice public class GlobalExceptionHandler {// 捕获所有的 RuntimeException 异常ExceptionHandler(value {RuntimeException.class})public ResponseResultString handleRuntimeException(RuntimeException e) {// 这里会捕获到一些业务异常或者其他运行时异常return new ResponseResult(HttpStatus.INTERNAL_SERVER_ERROR.value(), 运行时异常: e.getMessage());}// 捕获所有其他的 Exception 异常ExceptionHandler(value {Exception.class})public ResponseResultString handleException(Exception e) {// 处理一些无法捕获的异常return new ResponseResult(HttpStatus.INTERNAL_SERVER_ERROR.value(), 系统异常: e.getMessage());} } 并在统一返回信息中添加一个方法 public static ResponseResultString error(String message){return new ResponseResult(500,message,null);} 这样就行了是不是很简单。接下来进行测试。 密码错误 权限异常 数组越界 除零 这样项目中的异常就可以成功处理了但是有没有发现一个小问题 我们原先配置的SpringSecurity中的认证异常被全局异常覆盖了但是权限异常还是SpringSecurity中我们配置的异常。 这里暂时不会出问题就是返回的信息看上去与全局异常无关联不整齐我们修改一下权限异常处理即可。但是我认为这里应该有更好的处理方法也可能是我的全局异常处理过于简单导致的如果有大佬看到这里还请指点一下~ 总结 今天首先通过自定义AuthenticationEntryPoint和AccessDeniedHandler实现了认证与授权失败的异常捕获返回适当的状态码。随后介在项目中实现全局异常处理捕获运行时异常和系统异常并统一处理返回。这样不仅提高了系统的可维护性还能帮助开发人员快速定位问题并保证前后端的异常响应一致性。 那今天就这样明天可能暂停一天整理一下url路径、返回数据等一些与业务相关的内容。如果这篇文章有帮到你的话还希望多多支持你的支持就是我的最大动力
http://www.dnsts.com.cn/news/9868.html

相关文章:

  • 网站开发 数据库贵州 网站建设
  • 高端网站设计平台360怎么做网站
  • 二维码转换成短链接在线杭州最好的seo公司
  • 大连做网站比较好的鄂尔多斯市网站建设
  • 服装网站建设与实现国内购物网站排名
  • 网站域名 评估作价百度网站的建设
  • 微信如何做自己的网站北京 网站定制开发
  • 前端网站开发实例视频中国建设信息港网站
  • 南京的网站制作公司百度云建站WordPress
  • 美妆网站开发背景wordpress加描述
  • 做最优秀的自己演讲视频网站网站建设流程教案
  • 中国万维网官网域名注册网站做网站需要撑握哪些技术
  • jsp做的网站怎嘛用网络推广培训去哪里好
  • 宁夏住房和城乡建设厅门户网站龙华网站建设招聘
  • 唯品会网站架构自建网站系统
  • wordpress 建立第二个网站郴州365网
  • 站长检测同ip网站很多怎么办网站建设属于什么岗位
  • 企业文化 设计 咨询搜索引擎优化seo方案
  • 软件公司网站 手机版产品营销推广的方案
  • h5网站建设wordpress下载附件
  • 建设银行梅州分行网站淘客网站建设要求
  • 青岛 网站优化网站建设维护工作职责
  • 淘客网站推广免备案企业网站搜索优化外
  • 企业网站系统排名看网站有没有做404
  • 怎样自己免费建设一个网站wordpress图片超链接
  • 建设网站业务竞争大百度竞价排名案例分析
  • 响应式网站模板代码seo网站优化怎么做
  • 一个网站开发成本在百度做橱柜网站
  • 自己做简历网站应用商城软件下载 app
  • 新的网站建设一般多少钱如何做网页游戏代理