springboot项目如何重写源码

背景

在spring-security-oauth组件中获取用户信息接口,第三方返回的是

{
	"id":"xxxx",
	"attr":{
		"xx":""
    }
}

在security-oauth中解析用户信息写了

public Authentication extractAuthentication(Map<String, ?> map) {
		//其中username,spring定义了固定值,并且没有配置final String USERNAME = "user_name";
		if (map.containsKey(USERNAME)) {
			Object principal = map.get(USERNAME);
			Collection<? extends GrantedAuthority> authorities = getAuthorities(map);
			if (userDetailsService != null) {
				UserDetails user = userDetailsService.loadUserByUsername((String) map.get(USERNAME));
				authorities = user.getAuthorities();
				principal = user;
			}
			return new UsernamePasswordAuthenticationToken(principal, "N/A", authorities);
		}
		return null;
	}

方案

  • 找spring有没有配置更改这个值 final String USERNAME = "user_name";本人没找到
  • 重写源码
    1.找到源码位置
    在这里插入图片描述
    2.在项目中建相同的包名
    在这里插入图片描述
    3.重写
    在这里插入图片描述
    4.执行
    maven clean install
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
// 对overload测试的文件:OverloadTest.java public class OverloadTest { // 下面几个方法用来验证可以通过定义不同的参数类型和参数的数目进行方法重载。 public void fun(){ System.out.println("method fun in OverloadTest, no parameter"); } public void fun(float f) { System.out.println("method fun in OverloadTest, parameter type: float"); } public void fun(int i){ System.out.println("method fun in OverloadTest, parameter type: int"); } public void fun(int i1, int i2) { System.out.println("method fun in OverloadTest, parameter type: int, int"); } // 下面的两个方法用来验证可以通过定义不同的参数顺序进行方法重载。 // 需要注意:这里的参数肯定不是相同的类型,否则的顺序的先后就毫无意义。 public void fun1(int i, float f) { System.out.println("method fun1 in OverloadTest, sequence of parameters is: int, float"); } public void fun1(float f, int i) { System.out.println("method fun1 in OverloadTest, sequence of parameters is: float, int"); } // 下面的两个方法用来验证方法抛出的异常对于重载的影响. // 无论是异常的类型还是异常的个数都不会对重载造成任何的影响。 public void fun2() throws TestException { System.out.println("fun2 in OverloadTest, exception: TestException"); } public void fun2(int i) throws TestException, TestException1 { System.out.println("fun2 in OverloadTest, exception: TestException, TestException1"); } public void fun2(float f) throws Exception { System.out.println("fun2 in OverloadTest, exception: Exception"); } // 不能通过抛出的异常类型来重载fun方法。 //public void fun(int i) throws Exception { // System.out.println("method fun in OverloadTest, parameter type: int, exception: Exception"); //} // ? 不能通过返回值重载fun方法。 //public boolean fun(int i) throws Exception { // System.out.println("method fun in OverloadTest, parameter type: int, exception: Exception, return: boolean"); // return true; //} private void fun3() { } // 不能通过不同的访问权限进行重载 public void fun3() { } public static void main(String[] args) { // 这里只是定义了OverloadTest的实例,所以test不会调用 // OverloadTest1中的方法。 OverloadTest test = new OverloadTest1(); // 这里定义了OverloadTest1的实例,因为OverloadTest1是OverloadTest // 的子类,所以test1会调用OverloadTest中的方法。 OverloadTest1 test1 = new OverloadTest1(); try { int i = 1, j = 2, m = 3; // 这里不会调用OverloadTest1的fun方法 // test.fun(i, m, j); test1.fun(i, j, m); test1.fun(); // 这个调用不会执行,因为fun3()在OverloadTest中访问权限是priavte //test1.fun3(); test1.fun3(i); } catch(Exception e) { } } } class OverloadTest1 extends OverloadTest{ // 在子类中重载fun public void fun(int i, int m, int n) { System.out.println("Overload fun1 in OverloadTest1, parameter type: int, int, int"); } // 这个不是对父类中方法的重载,只是一个新的方法。 public void fun3(int i) { System.out.println("fun2 in OverloadTest1"); } } // 对override测试的文件:OverrideTest.java public class OverrideTest { public void fun() throws TestException { System.out.println("method fun in OverrideTest"); } private void fun1() { System.out.println("method fun1 in OverrideTest"); } public static void main(String[] args) { OverrideTest test = new OverrideTest1(); try { test.fun(); test.fun1(); } catch(Exception e) { } } } class OverrideTest1 extends OverrideTest{ // 以下正常Override public void fun() throws TestException2 { System.out.println("fun in OverrideTest1"); } // 不能Override父类中的方法,因为它定义了不同的异常类型和 // 返回值。 //public int fun() throws TestException1 { // System.out.println("method fun in Test"); // return 1; //} // 不能Override父类中的方法,因为它抛出了比父类中非法范围 // 更大的异常。 //public void fun() throws Exception { // System.out.println("fun in OverrideTest1"); //} // 这个方法并没有Override父类中的fun1方法,因为这个方法在 // 父类是private类型,所以这里只是相当于定义了一个新方法。 public void fun1() { System.out.println("method fun1 in Test"); } } class TestException extends Exception{ public TestException(String msg) { super(msg); } } class TestException1 extends TestException { public TestException1(String msg) { super(msg); } } class TestException2 extends TestException { public TestException2(String msg) { super(msg); } }
### 回答1: Spring Boot项目文档的源码可以在官方GitHub页面找到。在该页面上,我们可以看到Spring Boot项目文档的完整源代码。这个文档是使用AsciiDoc编写的,我们可以直接下载或克隆整个仓库,并在本地用任何文本编辑器打开。项目文档源码使用了一种结构化的方式来组织各个模块和章节,并使用了一些特定的标记和语法来表示不同的内容。 源码中的每个模块和章节代表了不同的主题,如入门介绍、配置、Web应用、数据访问等。每个模块都包含了一些示例代码、解释和说明,以帮助我们更好地理解相应的主题。在每个模块的源码中,我们可以找到针对该主题的详细说明和使用教程。 除了源码本身,还可以在源码的目录结构中找到其他有用的文件,比如构建说明、贡献指南等。这些文件可以帮助开发者更好地理解项目、了解如何参与到项目的开发中来。 通过查看源码,我们可以了解Spring Boot项目文档是如何组织的,以及每个章节的内容和结构。这有助于我们更好地理解和使用Spring Boot,并且可以在需要的时候快速地查找相应的文档。因此,查看Spring Boot项目文档的源码,对于开发者来说是非常有价值的。 ### 回答2: Spring Boot是一个用于构建Java应用程序的开源框架,它简化了基于Spring框架的应用程序的开发过程。Spring Boot项目文档是关于如何使用和开发Spring Boot应用程序的源代码以及相应的文档说明。 Spring Boot项目文档源码主要包括以下部分: 1. 引导类:Spring Boot应用程序的入口点是一个Java类,通常称为引导类。文档源码会包含一个或多个引导类的示例代码,用于演示如何创建一个Spring Boot应用程序,并配置应用程序的基本设置。 2. 配置文件:Spring Boot应用程序通常使用application.properties或application.yml等配置文件来配置应用程序的各种属性。文档源码中会包含示例配置文件的代码,用于演示如何配置不同的属性,如数据库连接和日志记录级别等。 3. 控制器类:Spring Boot应用程序通常使用控制器类来处理HTTP请求和响应。文档源码中会包含一个或多个控制器类的示例代码,用于演示如何编写请求处理方法、处理请求参数和返回响应等。 4. 数据持久层:Spring Boot应用程序通常与数据库进行交互,文档源码中会包含示例代码,演示如何使用Spring Data JPA或其他数据持久化技术来操作数据库。这些代码会展示如何定义实体类、Repository接口和查询方法等。 5. 服务类:Spring Boot应用程序通常包含一些业务逻辑处理的服务类。文档源码中会包含一些服务类的示例代码,用于演示如何编写业务逻辑,包括处理数据、调用其他服务和生成响应等。 6. 测试类:为了保证应用程序的质量和稳定性,Spring Boot应用程序通常包含一些单元测试和集成测试。文档源码中会包含示例测试类的代码,用于演示如何编写不同类型的测试,如单元测试和集成测试。 通过阅读和理解Spring Boot项目文档源码,开发人员可以更好地了解如何使用Spring Boot框架来构建应用程序,并学习如何使用框架提供的不同功能和特性。它还有助于开发人员快速入门和上手,减少开发过程中的困惑和错误。 ### 回答3: Spring Boot是一个开源的Java框架,它可以帮助开发者快速搭建和部署基于Spring的应用程序。在Spring Boot项目中,文档和源码是两个重要的部分。 首先,文档是指为了更好地理解和使用Spring Boot而编写的说明和指南。Spring Boot的官方文档非常详细,并且提供了许多示例和教程,涵盖了大部分开发者可能遇到的问题和需求。这些文档包含了Spring Boot的概念、特性和使用方法,以及常见的用例和最佳实践等。文档通常包含在官方网站上,用户可以通过浏览器访问和查阅。 其次,源码是指Spring Boot框架的实现代码。Spring Boot的源码托管在开源平台GitHub上,并且可以自由地查看和下载。通过查看源码,开发者可以深入了解Spring Boot框架的内部实现和原理,了解其中使用的技术和设计思想。这对于理解框架的工作机制以及进行定制和扩展非常有帮助。通过源码,开发者可以查看和分析Spring Boot的核心组件和模块,以及这些组件如何协同工作以实现功能。 总而言之,Spring Boot项目的文档和源码是开发者学习和使用这个框架的重要资源。通过查阅文档,开发者可以快速上手并正确地使用Spring Boot,而通过查看源码,开发者可以更深入地了解框架的内部工作机制和进行定制扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值