Spring Security安全自定义页面

时间:2016-04-15 19:54:47

标签: java spring security spring-mvc spring-security

有没有办法配置Spring Security(使用Java配置)以仅保护自定义页面,甚至可以处理@PreAuthorized注释?

我的想法是,我希望保护自定义调用,例如/admin和其他东西(没有对安全配置中的每个调用进行硬编码),这是在控制器中根据上述注释设置的,但其他东西不应该根本不使用身份验证。

2 个答案:

答案 0 :(得分:1)

我很难找到对我有用的东西。这就是诀窍,它也非常易读。

@Override
protected void configure(HttpSecurity http) throws Exception
{
    http.authorizeRequests()
            .antMatchers("/admin/**").access("hasRole('ADMIN')")
            .antMatchers("/**").permitAll()
            .anyRequest().authenticated()
            .and()
            .formLogin();
}

以及完整班级,适用于那些仍然不在同一页上的人

package com.your.package.config;

import org.springframework.beans.factory.annotation.Autowired;
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
public class SecurityConfig extends WebSecurityConfigurerAdapter
{
    @Override
    protected void configure(HttpSecurity http) throws Exception
    {
        http.authorizeRequests()
                .antMatchers("/admin/**").access("hasRole('ADMIN')")
                .antMatchers("/**").permitAll()
                .anyRequest().authenticated()
                .and()
                .formLogin();
    }

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception
    {
        auth.inMemoryAuthentication().withUser("user").password("password").roles("USER");
    }
}

请注意,不调用formLogin()方法会使默认值为" / login"返回404错误。

答案 1 :(得分:0)

我不确定这是否能回答您的问题,但您可以使用蚂蚁匹配器识别某些页面并忽略安全配置中的其他页面,如下所示:

.antMatchers("/**").permitAll()

.antMatcher("/admin/**")
.authorizeRequests()
.anyRequest().authenticated()