这里有一个简单的endpoint,存在于/api/v1/jwt中
@GetMapping("/jwt")
fun jwt(@RequestParam(value = "number", required = true) number: String): String? {
val jwtToken = Jwts.builder().setSubject(number).claim("roles", "user").setIssuedAt(Date()).signWith(SignatureAlgorithm.HS256, Base64.getEncoder().encodeToString("secret".toByteArray())).compact()
return jwtToken
}
返回一个有效的JWT令牌。
但我的安全配置不再起作用,现在所有endpoint似乎都受到保护,
@Configuration
@EnableWebSecurity
class SecurityConfig : WebSecurityConfigurerAdapter() {
@Bean
override fun authenticationManagerBean(): AuthenticationManager {
return super.authenticationManagerBean()
}
override fun configure(web: WebSecurity) {
web.ignoring().antMatchers("/v2/api-docs",
"/configuration/ui",
"/swagger-resources/**",
"/configuration/security",
"/swagger-ui.html",
"/webjars/**");
}
override fun configure(http: HttpSecurity) {
http.csrf()
.disable()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
.antMatchers("/api/v1/auth/**").permitAll()
.anyRequest().authenticated()
.and()
.addFilterBefore(JwtFilter(), UsernamePasswordAuthenticationFilter::class.java)
}
}
@Throws(IOException::class, ServletException::class)
override fun doFilter(req: ServletRequest, res: ServletResponse, chain: FilterChain) {
val request = req as HttpServletRequest
val response = res as HttpServletResponse
val authHeader = request.getHeader("authorization")
if ("OPTIONS" == request.method) {
response.status = HttpServletResponse.SC_OK
chain.doFilter(req, res)
} else {
if (authHeader == null || !authHeader.startsWith("Bearer ")) {
throw ServletException("Missing or invalid Authorization header")
}
val token = authHeader.substring(7)
try {
val claims = Jwts.parser().setSigningKey(Base64.getEncoder().encodeToString("secret".toByteArray())).parseClaimsJws(token).body
request.setAttribute("claims", claims)
} catch (e: SignatureException) {
throw ServletException("Invalid token")
}
chain.doFilter(req, res)
}
}
}
Edit:antPathRequestMatcher没有为configure启动,但我甚至添加了websecurity configure的路径,我得到了以下日志记录
2019-12-30 14:44:44.792 DEBUG 81181 --- [nio-8080-exec-2] o.s.security.web.FilterChainProxy : /api/v1/auth/request?number=5555555 has an empty filter list```
您可以使用configure(web:WebSecurity)
,这将绕过Spring Security过滤器,并且可以公开访问endpoint。
override fun configure(web: WebSecurity) {
web.ignoring().antMatchers("/api/v1/auth/**",
"/v2/api-docs",
"/configuration/ui",
"/swagger-resources/**",
"/configuration/security",
"/swagger-ui.html",
"/webjars/**");
}
您可以使用configure(http:HttpSecurity)
进行会话管理和基于角色的身份验证。您可能会看到HttpSecurity vs WebSecurity。
对于具有@component
(或任何形式的@bean)的自定义过滤器,WebSecurityConfigurerAdapter
将告诉Spring Security忽略通过它添加的任何过滤器。当时仍在调用过滤器,因为@component
(或任何形式的@bean)注释告诉Spring(再次)在安全链之外添加过滤器。因此,当筛选器在安全链中被忽略时,它不会被其他筛选器忽略(非安全?)链子。(请参阅此处)
我试图保护我的Spring启动应用程序(1.21)看起来像我的antMatcher("/报告**"). hasRole("报告")的一些URL模式被忽略。 e、 g.如果我浏览到localhost:9000/report/books之类的内容,我需要登录,它只适用于我的用户名密码组合,但我没有将角色报告设置为我的用户“user”。所以我希望我不被允许访问报告网站,但页面会显示出来。 我必须如何更改
我正在使用管理版本,ala PEP 440。 我已将几个版本上载到私有存储库: 我的问题是现在当我使用 我得到的版本是当我期望得到。 有没有办法让pip忽略“本地版本”,只安装准确的版本,而不必上传到不同的索引(即staging和stable)? 编辑: 我已尝试使用和标志,但问题仍然存在;皮普更喜欢0.0。2版本到0.0版本。2版本。 附加编辑: 我使用的是和python2.7
问题内容: 我正在研究与H2数据库接口的Java插件。我真正想要的是“插入忽略”语句;但是,我知道H2不支持此功能。我也知道Merge,但这并不是我想要的,如果记录存在,我不想更改它。 我正在考虑的是只是运行插入并让重复键异常发生。但是,我不希望这填满我的日志文件。DB调用发生在我无法更改的导入类中。所以我的问题是: 这是合理的做法吗?我不是让错误发生的人,但这似乎是这种情况下的最佳方法(它应该不
当 FreeMarker 运行在装有安全管理器的Java虚拟机中时, 你不得不再授与一些权限,确保运行良好。最值得注意的是, 你需要为对 freemarker.jar 的安全策略文件添加这些条目: grant codeBase "file:/path/to/freemarker.jar" { permission java.util.PropertyPermission "file.enco
我试图在wildfly上保护一个演示web应用程序。我已经在单机版中定义了这个安全域。xml 然后在web-inf下,我在web.xml中定义了这个安全约束 以及jboss网站上的这些内容。xml 问题是,如果我转到/projects URL,我不会重定向到登录页面,就好像忽略了约束一样。
本章定义的注解和API提供用于配置 Servlet 容器强制的安全约束。 @ServletSecurity 注解 @ServletSecurity 提供了用于定义访问控制约束的另一种机制,相当于那些通过在便携式部署描述符中声明式或通过 ServletRegistration 接口的 setServletSecurity 方法编程式表示。Servlet 容器必须支持在实现 javax.servlet