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

中小企业网站推广造价企业怎么登陆建设部网站

中小企业网站推广,造价企业怎么登陆建设部网站,网站建设需要什么能力,钉钉网站建设服务协议目录 一、需要了解的事项二、依赖三、WebSocket 配置3.1 、简单的消息代理3.2 、Spring安全配置 一、需要了解的事项 http和WebSocket的安全链和安全配置是完全独立的。SpringAuthenticationProvider根本不参与 Websocket 身份验证。将要给出的示例中#xff0c;身份验证不会… 目录 一、需要了解的事项二、依赖三、WebSocket 配置3.1 、简单的消息代理3.2 、Spring安全配置 一、需要了解的事项 http和WebSocket的安全链和安全配置是完全独立的。SpringAuthenticationProvider根本不参与 Websocket 身份验证。将要给出的示例中身份验证不会发生在 HTTP 协商端点上因为 JavaScript STOMPwebsocket库不会随 HTTP 请求一起发送必要的身份验证标头。一旦在 CONNECT 请求上设置用户( simpUser) 将被存储在 websocket 会话中并且以后的消息将不再需要进行身份验证。 二、依赖 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-websocket/artifactId /dependency dependencygroupIdorg.springframework/groupIdartifactIdspring-messaging/artifactId /dependency dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-security/artifactId /dependency dependencygroupIdorg.springframework.security/groupIdartifactIdspring-security-messaging/artifactId /dependency三、WebSocket 配置 3.1 、简单的消息代理 Configuration EnableWebSocketMessageBroker public class WebSocketConfig extends WebSocketMessageBrokerConfigurer {Overridepublic void configureMessageBroker(final MessageBrokerRegistry config) {config.enableSimpleBroker(/queue/topic);config.setApplicationDestinationPrefixes(/app);}Overridepublic void registerStompEndpoints(final StompEndpointRegistry registry) {registry.addEndpoint(stomp); setAllowedOrigins(*)} }3.2 、Spring安全配置 由于 Stomp 协议依赖于第一个 HTTP 请求因此需要授权对 stomp 握手端点的 HTTP 调用。 Configuration public class WebSecurityConfig extends WebSecurityConfigurerAdapter {Overrideprotected void configure(final HttpSecurity http) throws Exceptionhttp.httpBasic().disable().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and().authorizeRequests().antMatchers(/stomp).permitAll().anyRequest().denyAll();} }然后创建一个负责验证用户身份的服务。 Component public class WebSocketAuthenticatorService {public UsernamePasswordAuthenticationToken getAuthenticatedOrFail(final String username, final String password) throws AuthenticationException {if (username null || username.trim().isEmpty()) {throw new AuthenticationCredentialsNotFoundException(Username was null or empty.);}if (password null || password.trim().isEmpty()) {throw new AuthenticationCredentialsNotFoundException(Password was null or empty.);}if (fetchUserFromDb(username, password) null) {throw new BadCredentialsException(Bad credentials for user username);}return new UsernamePasswordAuthenticationToken(username,null,Collections.singleton((GrantedAuthority) () - USER) // 必须给至少一个角色);} }接着需要创建一个拦截器它将设置“simpUser”标头或在 CONNECT 消息上抛出“AuthenticationException”。 Component public class AuthChannelInterceptorAdapter extends ChannelInterceptor {private static final String USERNAME_HEADER login;private static final String PASSWORD_HEADER passcode;private final WebSocketAuthenticatorService webSocketAuthenticatorService;Injectpublic AuthChannelInterceptorAdapter(final WebSocketAuthenticatorService webSocketAuthenticatorService) {this.webSocketAuthenticatorService webSocketAuthenticatorService;}Overridepublic Message? preSend(final Message? message, final MessageChannel channel) throws AuthenticationException {final StompHeaderAccessor accessor MessageHeaderAccessor.getAccessor(message, StompHeaderAccessor.class);if (StompCommand.CONNECT accessor.getCommand()) {final String username accessor.getFirstNativeHeader(USERNAME_HEADER);final String password accessor.getFirstNativeHeader(PASSWORD_HEADER);final UsernamePasswordAuthenticationToken user webSocketAuthenticatorService.getAuthenticatedOrFail(username, password);accessor.setUser(user);}return message;} }请注意preSend() 必须返回 UsernamePasswordAuthenticationTokenSpring 安全链中会对此进行测试。如果UsernamePasswordAuthenticationToken构建没有通过GrantedAuthority则身份验证将失败因为没有授予权限的构造函数自动设置authenticated false 这是一个重要的细节在 spring-security 中没有记录。 最后再创建两个类来分别处理授权和身份验证。 Configuration Order(Ordered.HIGHEST_PRECEDENCE 99) public class WebSocketAuthenticationSecurityConfig extends WebSocketMessageBrokerConfigurer {Injectprivate AuthChannelInterceptorAdapter authChannelInterceptorAdapter;Overridepublic void registerStompEndpoints(final StompEndpointRegistry registry) {// 这里不用给任何东西}Overridepublic void configureClientInboundChannel(final ChannelRegistration registration) {registration.setInterceptors(authChannelInterceptorAdapter);}}请注意这Order是至关重要的它允许我们的拦截器首先在安全链中注册。 Configuration public class WebSocketAuthorizationSecurityConfig extends AbstractSecurityWebSocketMessageBrokerConfigurer {Overrideprotected void configureInbound(final MessageSecurityMetadataSourceRegistry messages) {// 添加自己的映射messages.anyMessage().authenticated();}// 这里请自己按需求修改Overrideprotected boolean sameOriginDisabled() {return true;} }之后编写客户端进行连接我们就可以这样指定客户端进行消息的发送。 MessageMapping(/greeting)public void greetingReturn(Payload Object ojd){simpMessagingTemplate.convertAndSendToUser(username,/topic/greeting,ojd);}
http://www.hkea.cn/news/14439066/

相关文章:

  • jsp网站开发职位要求关于新闻管理的网站建设报告
  • 新公司 做网站 流程莱芜搜狗推广提供
  • 永州高端网站建设wordpress百度音乐
  • 四川建设行政主管部门官方网站网站建设捌金手指花总二五
  • 网站建设公司招聘面试网络运维工程师需要学什么
  • 延安免费做网站cps推广网站
  • 百度网站站长静态网页多少钱一页
  • 制定一个网站建设方案大公司做网站的优势
  • 哈尔滨网站建设策划方案网站自动识别手机
  • 莱芜工商网站WordPress导入用户数据
  • 自动发货网站建设培训机构是什么意思
  • 品牌网站推广湛江网站优化快速排名
  • 电子邮箱网站建设佛山市城市建设工程有限公司
  • 软件开发自学入门教程网店seo名词解释
  • 相册网站怎么做的展馆展示设计公司6
  • 做app网站建设贸易网站建设公司
  • 怎么做网站站长视频金昌北京网站建设
  • 长春模板建站代理外贸网站建设加推广
  • 网站建设公司代理商怎么用免费的网站空间
  • wordpress网站商务通网站开发的编程软件
  • 四川建设厅电话网站wordpress连接插件
  • 免费试用网站 源码wordpress判断浏览器
  • wordpress主题去除文章作者谷歌搜索引擎seo
  • wdcp搭建网站教程wordpress最详细的教程视频
  • 做的最好的微电影网站宁波奢华做网站排名
  • 做网站的公司一年能赚多少钱wordpress4.9.8中文版
  • 上海招聘网官方网站朝外大街网站建设
  • 网站建设服务费应该算什么科目做网站用什
  • 黄江东莞网站建设装潢设计多少钱
  • 石家庄做手机网站建设北京网站备案速度