【发布时间】:2019-12-28 15:51:37
【问题描述】:
早安,
在此之前,我有一个关于 Spring security core 2.0.7 的旧项目。当用户未登录时,我只是在浏览器中浏览应用程序 URL,它会自动链接到 login.html 页面。 (假设我浏览了查看用户模式页面 url)
在spring security xml中,我有以下代码:
<security:http access-denied-page="/403_system.jsp" session-fixation-protection="newSession"
entry-point-ref="authenticationProcessingFilterEntryPoint"
access-decision-manager-ref="accessDecisionManager">
<security:intercept-url pattern="/session_expired.jsp" filters="none"/>
<!-- some other intercept-url here ...-->
<security:intercept-url pattern="/common/**" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
<security:intercept-url pattern="/common2/**" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
<security:http-basic/>
</security:http>
<bean id="authenticationProcessingFilterEntryPoint"
class="org.springframework.security.ui.webapp.AuthenticationProcessingFilterEntryPoint">
<property name="loginFormUrl" value="/login.html" />
<property name="forceHttps" value="${url.forceHttps}" />
<property name="serverSideRedirect" value="${url.serverSideRedirect}" />
</bean>
我相信是因为authenticationProcessingFilterEntryPoint,所以当它发现如果没有Authentication,就会直接指向/login.html。
在新项目中,我们改为使用spring security 4.2.0,配置完全改变,以下是java代码中的安全配置部分:
@Override
protected void configure(HttpSecurity http) throws Exception {
// disable csrf
http
// UrlAuthorizationConfigurer
.apply(new UrlAuthorizationConfigurer<>(getApplicationContext())).getRegistry()
.accessDecisionManager(accessDecisionManager()).antMatchers("/myapps/**")
.access("IS_AUTHORISED_SERVICE").and()
.csrf().disable()
// same frame
.headers().frameOptions().sameOrigin().and()
.authorizeRequests()
// permit all
.antMatchers("/session_expired.jsp", "/system_error.jsp", "/images/**", "/scripts/**",
"/styles/**", "/public/**", "/admin/**", "/login*", "/logout*", "/resources/**")
.permitAll()
// the rest authenticate
.anyRequest().authenticated()
// require login
.and().formLogin().loginPage("/login.html").successHandler(successHandler())
.failureHandler(failureHandler()).loginProcessingUrl("/j_security_check").permitAll().and()
.addFilterAfter(securityContextDetailsFilter(), UsernamePasswordAuthenticationFilter.class)
.addFilterBefore(logoutFilter(), LogoutFilter.class);
}
我相信我需要在UsernamePasswordAuthenticationFilter 类中做一些事情,但我真的不知道如何编写代码。我尝试用谷歌搜索,但没有得到我想要的东西,我相信我没有正确搜索它。
请多多指教。
【问题讨论】:
标签: java xml spring authentication filter