我有很多:
@Autowired
OAuth2ClientContext oauth2ClientContext;
@Override
protected void configure(HttpSecurity http) throws Exception {
http .csrf().disable()
.logout().logoutSuccessUrl("/").permitAll() //logout logic handled by spring
.and()
.antMatcher("/**")
.authorizeRequests()
.antMatchers("/", "/login**", "/webjars/**", "/user")
.permitAll()
.anyRequest().authenticated()
.and().exceptionHandling().authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint("/"))
.and()
.addFilterBefore(ssoFilter(), BasicAuthenticationFilter.class);
}
@Bean
public FilterRegistrationBean oauth2ClientFilterRegistration(OAuth2ClientContextFilter filter) {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(filter);
registration.setOrder(-100);
return registration;
}
protected Filter ssoFilter() {
CompositeFilter filter = new CompositeFilter();
List<Filter> filters = new ArrayList<>();
filters.add(constructFilter("/login/google", google(), googleResource()));
filter.setFilters(filters);
return filter;
}
private Filter constructFilter(String endpoint, OAuth2ProtectedResourceDetails clientDetails, ResourceServerProperties resourceDetails) {
OAuth2ClientAuthenticationProcessingFilter filter = new CustomOauth2AuthFilter(endpoint);
OAuth2RestTemplate template = new OAuth2RestTemplate(clientDetails, oauth2ClientContext);
filter.setRestTemplate(template);
filter.setTokenServices(new UserInfoTokenServices(resourceDetails.getUserInfoUri(), clientDetails.getClientId()));
return filter;
}
/*
/Returns a new AuthorizationCodeResourceDetails object configured with the properties from the application.yml file
*/
@Bean
@ConfigurationProperties("google.client")
OAuth2ProtectedResourceDetails google() {
return new AuthorizationCodeResourceDetails();
}
/*
/Returns a new ResourceServerProperties object configured with the properties from the application.yml file
*/
@Bean
@ConfigurationProperties("google.resource")
ResourceServerProperties googleResource() {
return new ResourceServerProperties();
}
}
我搜索了很多关于$('#element').on('tap', function(){
// some code ..
})
事件发生两次问题的问题,我使用tap
解决了我的问题,现在我有很多:
e.preventDefault()
好的,但正如我所说的,我有很多这样的电话,而且每次$('#element').on('tap', function(e){
e.preventDefault();
// some code ..
})
都不会写很多,然后我在Chrome控制台上键入e.preventDefault()
它告诉我:
$.fn.tap
我试图用这种方式覆盖它:
function (a){return a?this.bind(c,a):this.trigger(c)}
但它并没有像之前$.fn.tap = function (a) {
a.preventDefault();
return a?this.bind(c,a):this.trigger(c)
}
那样有效。
我没有看到任何显而易见的事情,而且我没有想到这一点。
感谢任何帮助或想法。提前谢谢。
答案 0 :(得分:10)
这是您创建$.fn.tap
: -
$.fn.tap = function(f) {
$(this).on('tap', function(e) {
e.preventDefault();
f();
});
return this;
};
//usage
$('.selector').tap(function() {
alert('foo bar')
})
@Washington Guedes - 覆盖默认的点按事件以始终使用e.preventDefault() 而不是从$(元素).on(&#39; tap&#39;,function(){})更改为 $(元件).tap(函数(){})
您可以为body
添加委托事件tap
,而无需指定目标。然后,这会触发正文中的所有tap
个事件,然后您可以检查目标是否有自己的tap
事件,然后您可以e.preventDefault();
。
注意:这对于委派的tap
事件不起作用,如图所示。
// global tap handler
$('body').on('tap', function(e) {
if ($._data(e.target, "events").tap)
e.preventDefault();
});
// tap event
$('a.tap').on('tap', function(e) {
$(this).css('color', 'red');
});
// delegated tap event
$('body').on('tap', 'a.delegate', function(e) {
$(this).css('color', 'green');
});
&#13;
a {
display: block;
margin: 20px 0;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.js"></script>
<a class="tap" href="www.google.co.uk">tap event, prevented.</a>
<a class="delegate" href="www.google.co.uk">delegate tap event, not prevented.</a>
<a href="www.google.co.uk">no tap event, not prevented</a>
&#13;
答案 1 :(得分:3)
jQuery的一个很酷的功能(我通常不会在一个句子中使用&#39; jQuery&#39;很酷&#39;)它允许你指定自定义行为事件,使用$.event.special
对象。
关于这个主题有very little documentation,所以一个小例子就是有序的。
使用click
事件的工作小提琴(因为这对我来说在我的笔记本电脑上写得更方便)can be found here
转换为您的请求,让所有 tap
事件在实际处理程序之前调用e.preventDefault()
,如下所示:
$.event.special.tap.add = function(options) {
var handler = options.handler;
options.handler = function(e) {
e.preventDefault();
return handler.apply(this, arguments);
}
}
这段代码做了什么(应该做什么,因为我还没有真正测试过上面的tap
版本)告诉jQuery你想要对tab
事件进行特殊处理,尤其是你想要提供一个包装处理程序&#39;这只是在调用提供的事件处理程序之前调用e.preventDefault()
。
更新:阻止默认tap
- 设置被覆盖,以供将来的访问者
注意:在尝试更改事物的默认行为之前,您应该问自己为什么默认值不适合您。主要是因为更改默认(=预期)行为会在维护代码和添加功能的同时扰乱您未来的自我(或更糟糕的是,另一个人)。
为了在代码中创建可维护(且可预测)的流,创建特殊案例函数($.fn.tap
)的建议解决方案实际上是一个非常可行的解决方案,因为它不会干扰默认值( =预期)事物的行为。
从我提供的链接中,您还应该能够创建自己的事件类型(例如tapOnly
),并且更明显地涉及一些自定义工作。然后,这两个解决方案都需要您更改事件绑定,这是您要阻止的。
答案 2 :(得分:1)
我知道这可能是一个坏主意,但我刚刚在Chrome中对此进行了测试
$('*').on('tap',function(e){
e.preventDefault();
});
$('#element').on('tap', function(){
// some code ..
});
如果你不需要这个所有元素:
$('*').not('#aCertainElement').on('tap',function(e){
e.preventDefault();
});
答案 3 :(得分:0)
我遇到了类似的问题,其中e.preventDefault()
会对某些情况起作用,但对其他情况则不起作用。它没有显示错误,使用try-catch
未显示catch alert
。添加e.stopImmediatePropagation()
可以解决问题,万一它可以帮助任何人