SpringBoot配置属性之Security

SpringBoot配置属性之Security

 

spring security是springboot支持的权限控制系统。

  • security.basic.authorize-mode要使用权限控制模式.

  • security.basic.enabled是否开启基本的鉴权,默认为true

  • security.basic.path需要鉴权的path,多个的话以逗号分隔,默认为[/**]

  • security.basic.realmHTTP basic realm 的名字,默认为Spring

  • security.enable-csrf是否开启cross-site request forgery校验,默认为false.

  • security.filter-orderSecurity filter chain的order,默认为0

  • security.headers.cache是否开启http头部的cache控制,默认为false.

  • security.headers.content-type是否开启X-Content-Type-Options头部,默认为false.

  • security.headers.frame是否开启X-Frame-Options头部,默认为false.

  • security.headers.hsts指定HTTP Strict Transport Security (HSTS)模式(none, domain, all).

  • security.headers.xss是否开启cross-site scripting (XSS) 保护,默认为false.

  • security.ignored指定不鉴权的路径,多个的话以逗号分隔.

  • security.oauth2.client.access-token-uri指定获取access token的URI.

  • security.oauth2.client.access-token-validity-seconds指定access token失效时长.

  • security.oauth2.client.additional-information.[key]设定要添加的额外信息.

  • security.oauth2.client.authentication-scheme指定传输不记名令牌(bearer token)的方式(form, header, none,query),默认为header

  • security.oauth2.client.authorities指定授予客户端的权限.

  • security.oauth2.client.authorized-grant-types指定客户端允许的grant types.

  • security.oauth2.client.auto-approve-scopes对客户端自动授权的scope.

  • security.oauth2.client.client-authentication-scheme传输authentication credentials的方式(form, header, none, query),默认为header方式

  • security.oauth2.client.client-id指定OAuth2 client ID.

  • security.oauth2.client.client-secret指定OAuth2 client secret. 默认是一个随机的secret.

  • security.oauth2.client.grant-type指定获取资源的access token的授权类型.

  • security.oauth2.client.id指定应用的client ID.

  • security.oauth2.client.pre-established-redirect-uri服务端pre-established的跳转URI.

  • security.oauth2.client.refresh-token-validity-seconds指定refresh token的有效期.

  • security.oauth2.client.registered-redirect-uri指定客户端跳转URI,多个以逗号分隔.

  • security.oauth2.client.resource-ids指定客户端相关的资源id,多个以逗号分隔.

  • security.oauth2.client.scopeclient的scope

  • security.oauth2.client.token-name指定token的名称

  • security.oauth2.client.use-current-uri是否优先使用请求中URI,再使用pre-established的跳转URI. 默认为true

  • security.oauth2.client.user-authorization-uri用户跳转去获取access token的URI.

  • security.oauth2.resource.id指定resource的唯一标识.

  • security.oauth2.resource.jwt.key-uriJWT token的URI. 当key为公钥时,或者value不指定时指定.

  • security.oauth2.resource.jwt.key-valueJWT token验证的value. 可以是对称加密或者PEMencoded RSA公钥. 可以使用URI作为value.

  • security.oauth2.resource.prefer-token-info是否使用token info,默认为true

  • security.oauth2.resource.service-id指定service ID,默认为resource.

  • security.oauth2.resource.token-info-uritoken解码的URI.

  • security.oauth2.resource.token-type指定当使用userInfoUri时,发送的token类型.

  • security.oauth2.resource.user-info-uri指定user info的URI

  • security.oauth2.sso.filter-order如果没有显示提供WebSecurityConfigurerAdapter时指定的Filter order.

  • security.oauth2.sso.login-path跳转到SSO的登录路径默认为/login.

  • security.require-ssl是否对所有请求开启SSL,默认为false.

  • security.sessions指定Session的创建策略(always, never, if_required, stateless).

  • security.user.name指定默认的用户名,默认为user.

  • security.user.password默认的用户密码.

  • security.user.role默认用户的授权角色.

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring Boot应用程序中,配置JWT的步骤如下: 1. 添加相关的依赖:在pom.xml文件中添加以下依赖: ``` <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.9.1</version> </dependency> ``` 2. 创建一个JWT工具类:该类用于处理JWT的生成和验证。以下是一个简单的示例: ``` import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; import org.springframework.beans.factory.annotation.Value; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.stereotype.Component; import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.function.Function; @Component public class JwtTokenUtil { private static final long JWT_TOKEN_VALIDITY = 5 * 60 * 60; @Value("${jwt.secret}") private String secret; public String getUsernameFromToken(String token) { return getClaimFromToken(token, Claims::getSubject); } public Date getExpirationDateFromToken(String token) { return getClaimFromToken(token, Claims::getExpiration); } public <T> T getClaimFromToken(String token, Function<Claims, T> claimsResolver) { final Claims claims = getAllClaimsFromToken(token); return claimsResolver.apply(claims); } private Claims getAllClaimsFromToken(String token) { return Jwts.parser().setSigningKey(secret).parseClaimsJws(token).getBody(); } private Boolean isTokenExpired(String token) { final Date expiration = getExpirationDateFromToken(token); return expiration.before(new Date()); } public String generateToken(UserDetails userDetails) { Map<String, Object> claims = new HashMap<>(); return doGenerateToken(claims, userDetails.getUsername()); } private String doGenerateToken(Map<String, Object> claims, String subject) { final Date createdDate = new Date(); final Date expirationDate = new Date(createdDate.getTime() + JWT_TOKEN_VALIDITY * 1000); return Jwts.builder().setClaims(claims).setSubject(subject) .setIssuedAt(createdDate).setExpiration(expirationDate) .signWith(SignatureAlgorithm.HS512, secret).compact(); } public Boolean validateToken(String token, UserDetails userDetails) { final String username = getUsernameFromToken(token); return (username.equals(userDetails.getUsername()) && !isTokenExpired(token)); } } ``` 3. 创建一个JWT过滤器:该过滤器用于验证请求的JWT。以下是一个简单的示例: ``` import io.jsonwebtoken.ExpiredJwtException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.stereotype.Component; import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @Component public class JwtRequestFilter extends OncePerRequestFilter { @Autowired private UserDetailsService userDetailsService; @Autowired private JwtTokenUtil jwtTokenUtil; @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) 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) { logger.error("Unable to get JWT Token"); } catch (ExpiredJwtException e) { logger.error("JWT Token has expired"); } } else { logger.warn("JWT Token does not begin with Bearer String"); } if (username != null && SecurityContextHolder.getContext().getAuthentication() == null) { UserDetails userDetails = this.userDetailsService.loadUserByUsername(username); if (jwtTokenUtil.validateToken(jwtToken, userDetails)) { UsernamePasswordAuthenticationToken usernamePasswordAuthenticationToken = new UsernamePasswordAuthenticationToken( userDetails, null, userDetails.getAuthorities()); usernamePasswordAuthenticationToken .setDetails(new WebAuthenticationDetailsSource().buildDetails(request)); SecurityContextHolder.getContext().setAuthentication(usernamePasswordAuthenticationToken); } } chain.doFilter(request, response); } } ``` 4. 在Spring Boot应用程序中配置JWT:您需要在应用程序配置文件中添加以下属性: ``` jwt.secret=your_secret_key_here ``` 5. 在Spring Boot应用程序中启用JWT:您需要在Spring Boot应用程序中启用JWT。以下是一个简单的示例: ``` import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.config.http.SessionCreationPolicy; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; @SpringBootApplication(exclude = {SecurityAutoConfiguration.class}) @EnableWebSecurity public class Application extends WebSecurityConfigurerAdapter { @Autowired private JwtAuthenticationEntryPoint jwtAuthenticationEntryPoint; @Autowired private UserDetailsService jwtUserDetailsService; @Autowired private JwtRequestFilter jwtRequestFilter; @Autowired public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(jwtUserDetailsService).passwordEncoder(passwordEncoder()); } @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } @Bean public JwtAuthenticationEntryPoint jwtAuthenticationEntryPointBean() throws Exception { return new JwtAuthenticationEntryPoint(); } @Bean public JwtRequestFilter jwtRequestFilterBean() throws Exception { return new JwtRequestFilter(); } @Override @Bean public AuthenticationManager authenticationManagerBean() throws Exception { return super.authenticationManagerBean(); } @Override protected void configure(HttpSecurity httpSecurity) throws Exception { httpSecurity.csrf().disable() .authorizeRequests().antMatchers("/authenticate").permitAll(). anyRequest().authenticated().and(). exceptionHandling().authenticationEntryPoint(jwtAuthenticationEntryPoint).and().sessionManagement() .sessionCreationPolicy(SessionCreationPolicy.STATELESS); httpSecurity.addFilterBefore(jwtRequestFilter, UsernamePasswordAuthenticationFilter.class); } public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 以上就是在Spring Boot应用程序中配置JWT的基本步骤。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值