当前位置: 首页 > news >正文

中卫市网站建设_网站建设公司_跨域_seo优化

建设厅网站的投诉可以哪里查,口碑做团购网站,wordpress总访问不了,2022最新引流推广平台前文讲解实现了spring boot集成Oauth2.0#xff0c;实现了授权服务器和资源服务器的搭建#xff0c;并通过浏览器和postman测试#xff0c;获取到了授权码#xff0c;用携带授权码的URL能够争取范文到资源。 本文详细讲解spring boot集成Oauth2.0的几个重要文件接口#…        前文讲解实现了spring boot集成Oauth2.0实现了授权服务器和资源服务器的搭建并通过浏览器和postman测试获取到了授权码用携带授权码的URL能够争取范文到资源。 本文详细讲解spring boot集成Oauth2.0的几个重要文件接口详细如下 1、授权服务配置接口AuthorizationServerConfigurerAdapter AuthorizationServerConfigurer接口其中存在3个方法 ☆ AuthorizationServerSecurityConfigurer配置令牌端点Token Endpoint的安全约束 ☆ ClientDetailsServiceConfigurer配置OAuth2客户端 ☆ AuthorizationServerEndpointsConfigurer配置授权authorization以及令牌token的访问端点和令牌服务(token services) 详细代码如下bleAuthorizationServer public class OAuthAuthorizationServerConfig extends AuthorizationServerConfigurerAdapter { Autowired private DataSource dataSource; Autowired private AuthenticationManager authenticationManager; Autowired private OAuthWebSecurityConfig oauthWebSecurityConfig; //AuthorizationServerSecurityConfigurer配置令牌端点Token Endpoint的安全约束 //AuthorizationServerSecurityConfigurer继承自SecurityConfigurerAdapter也就是一个 Spring Security安全配置提供给AuthorizationServer去配置AuthorizationServer的端点/oauth/****的安全访问规则、过滤器Filter。 Override public void configure(final AuthorizationServerSecurityConfigurer oauthServer) throws Exception { oauthServer .tokenKeyAccess(permitAll())//客户端token调用许可 .checkTokenAccess(permitAll())//客户端校验token访问许可 .allowFormAuthenticationForClients();        } //refresh_token 单独配置UserDetailsService Bean public UserDetailsService userDetailsServiceRefresh_token() {  return oauthWebSecurityConfig.userDetailsService(); } //AuthorizationServerEndpointsConfigurer配置授权authorization以及令牌token的访问端点和令牌服务(token services) Override public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception { endpoints // 设置令牌    .tokenStore(new JdbcTokenStore(dataSource)).userDetailsService(userDetailsServiceRefresh_token()) .authenticationManager(authenticationManager); } Bean // 声明 ClientDetails实现 public ClientDetailsService clientDetailsService() { return new JdbcClientDetailsService(dataSource); }    //ClientDetailsServiceConfigurer配置OAuth2客户端 Override public void configure(final ClientDetailsServiceConfigurer clients) throws Exception { clients.withClientDetails(clientDetailsService()); }    } 2、资源服务配置接口ResourceServerConfigurerAdapter ResourceServerConfigurerAdapter 资源服务器配置内部关联了ResourceServerSecurityConfigurer 和 HttpSecurity。前者与资源安全配置相关后者与http安全配置相关详细代码如下 /*** 资源服务器配置*/ Configuration EnableResourceServer EnableWebSecurity EnableGlobalMethodSecurity(prePostEnabled true) Order(-1) public class OAuthResourcesServerConfig extends ResourceServerConfigurerAdapter { Autowired private DataSource dataSource;      //在每个ResourceServer实例上设置resourceId该resourceId作为该服务资源的唯一标识。假如同一个微服务资源部署多份resourceId相同 private static final String DEMO_RESOURCE_ID test-resource; Override public void configure(ResourceServerSecurityConfigurer resources) { resources.resourceId(DEMO_RESOURCE_ID);  //配置resourceServerID resources.tokenStore(new JdbcTokenStore(dataSource)); //...... 还可以有有其他的配置  } Override public void configure(HttpSecurity http) throws Exception { http    .cors()//开启跨域 .and() .csrf().disable() .logout() .logoutUrl(/logout)//虚拟的登出地址 .and() .authorizeRequests() .antMatchers(/loginSuccess).permitAll() .antMatchers(/loginSuccess.html).permitAll() .antMatchers(/actuator/health).permitAll() .anyRequest().authenticated(); } } 3、web安全配置接口WebSecurityConfigurerAdapter WebSecurityConfigurerAdapter是Spring Security提供了一个抽象类实现了默认的认证和授权允许用户自定义一个WebSecurity类重写其中的三个configure来实现自定义的认证和授权这三个方法如下 自定义身份认证的逻辑 protected void configure(AuthenticationManagerBuilder auth) throws Exception { } 自定义全局安全过滤的逻辑 public void configure(WebSecurity web) throws Exception { } 自定义URL访问权限的逻辑 protected void configure(HttpSecurity http) throws Exception { } 详细代码如下 Configuration EnableWebSecurity EnableGlobalMethodSecurity(prePostEnabled true) Order(-1) public class OAuthWebSecurityConfig extends WebSecurityConfigurerAdapter { Autowired private MyUserDetailServiceImpl myUserDetailServiceImpl; Autowired private LogoutSuccessHandlerImpl logoutSuccessHandler; Autowired private CustomAuthenticationFailureHandler customAuthenticationFailureHandler; Autowired private DataSource dataSource; /** * return RememberMe 功能的 Repository */ Bean public PersistentTokenRepository persistentTokenRepository() { // 连接数据库的实现类还有一个实现类时存内存的InMemoryTokenRepositoryImpl JdbcTokenRepositoryImpl tokenRepository new JdbcTokenRepositoryImpl(); // 配置数据源 tokenRepository.setDataSource(dataSource); // 在启动数据库时创建存储token的表 //tokenRepository.setCreateTableOnStartup(true); return tokenRepository; } /******************************remember me***********************************/ Override Bean public AuthenticationManager authenticationManagerBean() throws Exception { return super.authenticationManagerBean(); } /** 放行静态资源 */ Override public void configure(WebSecurity web) throws Exception { web.ignoring().antMatchers(/swagger-ui.html); web.ignoring().antMatchers(/swagger-resources/**); web.ignoring().antMatchers(/v2/api-docs); web.ignoring().antMatchers(/configuration/security); web.ignoring().antMatchers(/configuration/ui); //web.ignoring().antMatchers(/webjars/springfox-swagger-ui/**); /************************************************************ * servlet 3.0 以上的版本支持直接访问 jar 包里面的资源文件。 * 访问方式将 jar 包里的 META-INF/resources 目录看成根目录 * 则这个目录下的文件都可以直接访问 * swagger-bootstrap-ui-1.9.6.jar资源放行*/ web.ignoring().antMatchers(/webjars/**); web.ignoring().antMatchers(/doc.html); web.ignoring().antMatchers(/loginSuccess); web.ignoring().antMatchers(/loginSuccess.html); web.ignoring().antMatchers(/loginError); web.ignoring().antMatchers(/lock); web.ignoring().antMatchers(/assets/**); //路由跳转允许 web.ignoring().antMatchers(/api/**); web.ignoring().antMatchers(/websocket/**); //农村饮水安全 web.ignoring().antMatchers(/Serialnum/EnSure); //序列号确认 web.ignoring().antMatchers(/lock); //锁屏页面 web.ignoring().antMatchers(/login.html); //序列号确认 //放行consul安全监测接口 web.ignoring().antMatchers(/v1); web.ignoring().antMatchers(/actuator/health); //web.ignoring().antMatchers(/loginError.html); web.ignoring().antMatchers(/favicon.ico); //放行单点登录 web.ignoring().antMatchers(/index); web.ignoring().antMatchers(/index/**); web.ignoring().antMatchers(/index/oauth_callback); //web.ignoring().antMatchers(/myLogout); } Override protected void configure(HttpSecurity http) throws Exception { http        .requestMatchers().antMatchers(HttpMethod.OPTIONS,/login, /oauth/authorize, /oauth/token) .and() .cors()//开启跨域 .and() .csrf().disable()               .requestMatchers()        .antMatchers(/login) .antMatchers(HttpMethod.OPTIONS) .antMatchers(/oauth/authorize) .and()     .rememberMe()//记住我相关配置 .tokenRepository(persistentTokenRepository()) .tokenValiditySeconds(60*60*10) //.antMatchers(/oauth/token) .and()            .authorizeRequests() .anyRequest().authenticated() .and() .formLogin() .loginPage(/login) // 自定义登录页面这里配置了 loginPage, 就会通过 LoginController 的 login 接口加载登录页面 // 登入成功后跳转至指定页面 //.defaultSuccessUrl(/loginSuccess) .failureUrl(/loginError).permitAll()        .and() .logout() .logoutUrl(/logout)//虚拟的登出地址 .logoutSuccessHandler(logoutSuccessHandler); http.formLogin().failureHandler(customAuthenticationFailureHandler); } Bean Override public UserDetailsService userDetailsService(){ return myUserDetailServiceImpl; //return userAuthenticationProvider; } Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { // 配置用户名密码这里采用内存方式生产环境需要从数据库获取    //        auth.inMemoryAuthentication() //            .withUser(admin) //            .password(passwordEncoder().encode(123))           //            .roles(USER); // 使用自定义认证与授权 auth.userDetailsService(userDetailsService()); } Bean public BCryptPasswordEncoder passwordEncoder(){ return new BCryptPasswordEncoder(); } } 4、用户登录服务接口UserDetailsService Spring Security中进行身份验证的是AuthenticationManager接口ProviderManager是它的一个默认实现但它并不用来处理身份认证而是委托给配置好的AuthenticationProvider每个AuthenticationProvider会轮流检查身份认证。检查后或者返回Authentication对象或者抛出异常。验证身份就是加载响应的UserDetails看看是否和用户输入的账号、密码、权限等信息匹配。UserDetails中需要重定义loadUserByUsername()函数。 详细代码如下 Component public class MyUserDetailServiceImpl implements UserDetailsService { private Logger logger LoggerFactory.getLogger(this.getClass()); Autowired private SysUserService sysUserService; Autowired private SysUserMapper sysUserMapper; /** * param username * return * throws UsernameNotFoundException */ Override public UserDetails loadUserByUsername(String username) { //1.根据用户名去数据库去查询用户信息获取加密后的密码          SysUser sysUser sysUserMapper.findByName(username); if(sysUsernull) { logger.info(-------------未查询到用户名 username); throw new UsernameNotFoundException(Invalid username or password.); }else {         Boolean stateStrsysUser.getAccountNonLocked();//锁定状态 if(stateStrfalse){//用户被锁定 long lockTime sysUser.getLockTime(); long sysTime System.currentTimeMillis(); long time sysTime - lockTime; if(time10*60*1000) { //时间超过10分钟解锁账户 sysUserMapper.updateUNLockedByUserId(username); sysUserMapper.updatelockTimeByUserId(username, 0L); sysUserMapper.updatenLockByUserId(username, 0L); stateStrtrue; }else { throw new InternalAuthenticationServiceException(该账号已被锁定请联系管理员); }                } SetString permissions sysUserService.findPermissions(username);         ListGrantedAuthority grantedAuthorities permissions.stream().map(GrantedAuthorityImpl::new).collect(Collectors.toList()); return new User(username, //encryptedPassWord, sysUser.getPassword(), true, true, true, stateStr, //锁定状态                grantedAuthorities); }          }  } 5、授权失败接口SimpleUrlAuthenticationFailureHandler 在Spring Security Web框架内部缺省使用的认证错误处理策略是AuthenticationFailureHandler的实现类SimpleUrlAuthenticationFailureHandler。它由配置指定一个defaultFailureUrl,表示认证失败时缺省使用的重定向地址。一旦认证失败它的方法onAuthenticationFailure被调用时它就会将用户重定向到该地址。如果该属性没有设置它会向客户端返回一个401状态码。另外SimpleUrlAuthenticationFailureHandler还有一个属性useForward,如果该属性设置为true,页面跳转将不再是重定向(redirect)机制取而代之的是转发(forward)机制。 该处只需要重定义onAuthenticationFailure()详细代码如下 //3、将登录失败提示到前端展示 Component public class CustomAuthenticationFailureHandler extends SimpleUrlAuthenticationFailureHandler { private Logger logger LoggerFactory.getLogger(this.getClass()); private  static ObjectMapper objectMapper new ObjectMapper(); Autowired private ThymeleafViewResolver viewResolver; private RedirectStrategy redirectStrategy new DefaultRedirectStrategy(); Override public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) throws IOException, ServletException {         //此处自行定义授权失败功能。 } } springboot集成Oauth2.0授权包接口文件配置详解到此就结束了学友在实际操作过程中遇到问题欢迎联系博主。 下文讲解spring cloud的配置与应用实现服务注册机制。
http://www.lebaoying.cn/news/34206.html

相关文章:

  • 网站布局设计自适应青海高等级公路建设管理局网站
  • 秦皇岛的网站建设公司个体户可以做网站建设
  • 洛阳网站推广方式做特价网站
  • 上往建站常州工程建设交易网
  • 网站恶意点击wordpress固定连接打不开
  • 对网站界面设计起决定性作用的是网站建设收费标准服务
  • 永州市住房和城乡建设局网站装修公司加盟好还是自己开
  • 个人能建设网站吗网页搜索关键词
  • 湖南营销型企业网站开发网站优化包括
  • icp备案网站信息查询四位分享码2023
  • 石家庄住房和建设局网站怎么看网站开发的发展
  • 网站建设的swot分析网站推广方式的策划
  • 我要找工作 招聘附近seo搜索优化服务
  • 河南省建设厅网站154号文件wordpress有赞支付宝
  • 珠海做网站设计上海公司核名工商官网
  • 手机型网站办公室装修工程
  • 计算机网络技术 网站建设注册过什么网站
  • 西安网站建设麦欧科技慕课网网站开发背景
  • 网站三要网站备案后有可能会被注销吗
  • 网站开发一般用南京自媒体公司
  • 服务器上装wordpress网站seo技术能不能赚钱
  • 网站模板的功能建设网站去哪里备案
  • 郑州网站建设冫汉狮网络对于一个确定的网和设计方案
  • 做超市海报的网站温州网站制作网站
  • 黄岐网站建设建一个网站需要多少时间表
  • 外贸建站培训微信手机网站支付怎么做
  • 幸运28网站代理怎么做网站推广seo软件
  • 每天一篇好文章网站做阿里巴巴网站图片尺寸
  • 烟台消防建设信息网站wordpress获取文章的标签
  • 专类销售网站有哪些建设网站方面的证书