springboot正常启动后访问不到controller层的接口

一、问题描述

下面是我的springboot项目的一个controller类,在eclipse中用springboot内置的tomcat能正常访问接口。

 maven打成war包,部署到测试环境中,项目正常启动,定时任务正常启动,静态页面也能访问到,但是controller访问报错,没有找到对应的请求地址,如下:

二、解决尝试

既然找不到这个请求地址,就从controller问什么没有加载到去考虑。

尝试1:

启动类在controller外面,不加包扫描注解也会自动扫描controller下的类。

避免扫描不到,加了包扫描注解,尝试还是访问不到。

尝试二:

 controller类的注解,类上加@Controller注解,方法返回json,方法上加上@ResponseBody注解,没问题啊。还是访问不到。

 方法中改成@RestController注解,方法去掉@ResponseBody注解,还是访问不到。

尝试三:

maven把项目打成jar包方式启动,能正常访问到接口。很奇怪,但是不想用jar的方式。

尝试四:

重新写了一个新的controller类,新接口能访问到

 最后定位到mapping的value,访问不到的接口路径是.jspx结尾的,去掉.jspx就能访问到了。可能springboot对这个请求地址有过滤???

 

当时在别的项目中向前端提供的接口都是以.jspx结尾的,所以这次就从别的地方拷贝过来。关键是本地正常,jar包调用也正常,打成war包就访问不到。郁闷

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Spring Boot 中,我们可以使用 Spring Security 来实现应用授权。下面是一个简单的示例: 1. 添加依赖 在 pom.xml 文件中添加 Spring Security 的依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> ``` 2. 配置类 创建一个配置类来配置 Spring Security: ```java @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private UserService userService; @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/api/**").authenticated() .anyRequest().permitAll() .and().formLogin().permitAll() .and().logout().permitAll(); } @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(userService).passwordEncoder(passwordEncoder()); } @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } } ``` 在这个配置类中,我们使用 `@EnableWebSecurity` 注解来启用 Spring Security,并继承 `WebSecurityConfigurerAdapter` 类来配置安全策略。在 `configure(HttpSecurity http)` 方法中,我们定义了用户需要认证才能访问 `/api/**` 的接口,其他所有接口都可以匿名访问。在 `configure(AuthenticationManagerBuilder auth)` 方法中,我们使用 `userService` 来获取用户信息,并使用 `BCryptPasswordEncoder` 对密码进行加密。 3. 用户服务 创建一个用户服务来提供用户信息: ```java @Service public class UserService implements UserDetailsService { @Autowired private UserRepository userRepository; @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { User user = userRepository.findByUsername(username); if (user == null) { throw new UsernameNotFoundException("User not found"); } return new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(), Collections.emptyList()); } } ``` 在这个用户服务中,我们使用 `UserRepository` 来获取用户信息,并将其转换为 `UserDetails` 对象。`UserDetails` 对象包含用户名、密码和用户角色等信息。 4. 控制器 创建一个控制器来测试接口权限: ```java @RestController @RequestMapping("/api") public class ApiController { @GetMapping("/hello") public String hello() { return "Hello, world!"; } @PostMapping("/login") public void login() { // do nothing } } ``` 在这个控制器中,我们定义了一个 `/api/hello` 的接口,该接口需要认证才能访问。我们还定义了一个 `/api/login` 的接口,该接口用于登录,但实际上并不做任何事情。 5. 测试 启动应用程序后,我们可以使用 Postman 等工具来测试接口的权限。首先,我们需要使用 `/api/login` 接口来登录: ``` POST http://localhost:8080/api/login Content-Type: application/json { "username": "admin", "password": "admin" } ``` 登录成功后,我们可以使用 `/api/hello` 接口来测试: ``` GET http://localhost:8080/api/hello Authorization: Bearer <access_token> ``` 其中,`<access_token>` 是登录成功后返回的访问令牌。如果访问令牌有效,则会返回 `Hello, world!`,否则会返回 401 错误。 这就是一个简单的 Spring Boot 应用程序中实现授权的示例。当然,实际应用中可能会涉及到更复杂的授权场景,需要根据具体情况来进行处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值