spring-boot - Spring Boot 安全性未按预期工作
问题描述
我有一个 android 客户端试图使用 api 休息服务
弹簧安全配置:
@Override
protected void configure(HttpSecurity httpSecurity) throws Exception {
httpSecurity.csrf().disable()
.authorizeRequests().antMatchers("/authenticateAPI").permitAll().
anyRequest().authenticated().and().
exceptionHandling().authenticationEntryPoint(jwtAuthenticationEntryPoint)
.and().sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS);
httpSecurity.addFilterBefore(jwtRequestFilter, UsernamePasswordAuthenticationFilter.class);
}
从邮递员我得到jwt:
但是......从Android客户端我在按下登录按钮时卡在build()中
public class ApiClient {
public static final String BASE_URL = "http://192.168.0.64:8080/";
private static Retrofit retrofit = null;
public static Retrofit getClient() {
if (retrofit == null) {
Gson gson = new GsonBuilder()
.setLenient()
.create();
retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create(gson))
.build(); // I GET AN ERROR HERE
}
return retrofit;
}
}
API 日志显示来自JwtFilter类的方法doFilterInternal的“JWT 令牌不以 Bearer 关键字开头”
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
final String requestTokenHeader = request.getHeader("Authorization");
String username = null;
String jwtToken = null;
if (requestTokenHeader != null && requestTokenHeader.startsWith("Bearer ")) {
jwtToken = requestTokenHeader.substring(7);
try {
username = jwtTokenUtil.getUsernameFromToken(jwtToken);
} catch (IllegalArgumentException e) {
System.out.println("Unable to get JWT Token for this user");
} catch (ExpiredJwtException e) {
System.out.println("JWT Token has been expired"); **************HERE***************
}
} else {
logger.warn("JWT Token do not start with Bearer keyword");
}
因为 requestTokenHeader 为空,但是当我进行身份验证时我不需要令牌并且系统要求它。
如果设置为 ".authorizeRequests().antMatchers("/authenticateAPI").permitAll()"。
我认为问题出在春季安全设置中,但我看不到它,请帮助我
解决方案
推荐阅读
- python - [Theano]TypeError:成本必须是标量
- node.js - 如何使用 Node.JS 通过标识符跟踪用户
- java - 通过 MySQL Connector/J 8.0.23 获取的时间戳字段不正确
- java - 用户输入使用空格键后未读取
- android - 在 com.example.inquiryhome.model.User.UserDoctor 类上找不到 E7Dap0gODdUrzBC0Dnkn2jfoCbh1 的设置器/字段
- r - 使用 R 将二进制文档转换为 txt
- python - Heroku 处理 Django 模板文件的方式与我的本地 Django 不同吗?
- google-apps-script - 如何通过 Google 验证我的 google sheet 应用程序?
- sql - 在 plsql 中以 mm/dd/yyyy 格式插入日期和时间,以 hh24:mm:ss 格式插入时间
- google-cloud-dataflow - JdbcIO.readAll 没有触发结果