我已经用Spring Security保护了Spring Boot应用程序的APIendpoint。
登录时,我生成一个新的jwt令牌并将其提交给用户。
对于数据请求,我希望用户在头中提交令牌。
如果我这样做使用邮递员,它的工作完美罚款。当我试图用React发送令牌时,它失败了(axios/finch/超级代理)。问题不在于令牌本身的提交,因为如果我禁用授权,我可以用控制器读取授权头。
相反,Spring Security在通过React发送标头时不知何故无法识别标头。
我尝试添加另一个自定义标题,看看Spring是否允许这样做,但该自定义标题也被“阻止”。
反应:
axios(apiTest, {
async: true,
crossDomain: true,
method: "GET",
headers: {
Authorization: `Bearer ${this.props.token}`,
TestHeader: "RandomValue",
Accept: "*/*"
},
processData: false,
data: ""
})
.then(res => {
if (res.data !== undefined) {
console.log(res.data);
}
})
.catch(err => console.error(error));
Spring Security:令牌过滤器:
@Component
public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {
@Value("${jwt.header}")
private String tokenHeader;
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
throws ServletException, IOException {
//Usual Authorization header (is null with React-use)
final String requestHeader = request.getHeader(this.tokenHeader);
//Custom header (null)
System.out.println("Test Header: " + request.getHeader("TestHeader"));
if (requestHeader != null && requestHeader.startsWith("Bearer ")) {
String authToken = requestHeader.substring(7);
JwtAuthentication authentication = new JwtAuthentication(authToken);
SecurityContextHolder.getContext().setAuthentication(authentication);
}
chain.doFilter(request, response);
}
}
配置:
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private JwtAuthenticationEntryPoint unauthorizedHandler;
@Autowired
private JwtAuthenticationProvider jwtAuthenticationProvider;
@Autowired
public void configureAuthentication(AuthenticationManagerBuilder authenticationManagerBuilder) {
authenticationManagerBuilder.authenticationProvider(jwtAuthenticationProvider);
}
@Bean
CorsFilter corsFilter() {
CorsFilter filter = new CorsFilter();
return filter;
}
@Bean
public JwtAuthenticationTokenFilter authenticationTokenFilterBean() {
return new JwtAuthenticationTokenFilter();
}
@Override
protected void configure(HttpSecurity httpSecurity) throws Exception {
httpSecurity.addFilterBefore(corsFilter(), SessionManagementFilter.class).csrf().disable().authorizeRequests()
.antMatchers("/Login").permitAll().antMatchers("/CloseConnection**").permitAll()
.antMatchers(HttpMethod.OPTIONS, "**").permitAll().anyRequest().authenticated().and()
.exceptionHandling().authenticationEntryPoint(unauthorizedHandler);
}
}
知道确切的问题是什么以及如何解决吗?
试试这个它对我有用
private String getToken(HttpServletRequest request) {
String header = request.getHeader("Authorization");
if (header != null && header.startsWith("Bearer ")) {
return authHeader.replace("Bearer ","");
}
return null;
}
axios呼叫
axios.post(url,{
"data": 'sample',
},
{
headers: {
'Authorization':'Bearer '+token,
'Content-Type':'application/json'
}
})
.then((res) => {
console.log(res);
})
我们希望使用SpringOAuth2JWT令牌支持。我们的架构如下:Spring只提供了一个REST接口,前端由AngularJS构建,AngularJS查询Spring REST接口。出于授权目的,我们的前端团队希望使用JWT。因此,我查看了SpringOAuth2JWT支持,但仍然不知道如何与前端讨论JWT令牌。在阅读了一些教程后,我实现了以下内容: 我不确定工作流程如何。我猜:前端访问/oa
问题内容: 我们的React Native Redux应用程序使用JWT令牌进行身份验证。有许多操作需要此类令牌,并且例如在应用加载时会同时分派许多令牌。 例如 双方并要求JWT。我们将令牌保存在和中。我的问题是如何处理令牌到期。 最初,我将使用中间件来处理令牌到期 } 我遇到的问题是,对于令牌和操作,都会刷新令牌,因为在分发令牌和令牌时,令牌将过期。理想情况下,我想“暂停”需要身份验证的操作
我遇到的问题是,和操作都将刷新令牌,因为在分派时,令牌将过期。理想情况下,我希望“暂停”需要身份验证的操作,直到令牌刷新。有没有一种方法可以用中间件做到这一点?
问题内容: 我正在使用dgrijalva / jwt-go /软件包。 我想从令牌中提取有效载荷,但是我找不到方法。 示例(摘自:https : //jwt.io/): 对于编码: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOixMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydhVrF7H
我有一个ReactJS项目,当我登录时,我将我的令牌保存到本地存储。如何将令牌JWT转换为ab对象并获取id-user?
我使用jwt为用户在我的应用程序上执行操作提供授权。它工作得很好,因为我不必访问数据库来查看用户是否有效。我在jwt中遇到的问题是,当令牌过期时,用户必须再次登录。在网上阅读我一直在阅读刷新令牌可以用来解决这个问题,但没有白痴证明解释它如何工作。它们是如何工作的?需要数据库访问吗?