Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring安全配置httpsecurity_Java_Spring_Security_Spring Mvc_Spring Security - Fatal编程技术网

Java Spring安全配置httpsecurity

Java Spring安全配置httpsecurity,java,spring,security,spring-mvc,spring-security,Java,Spring,Security,Spring Mvc,Spring Security,我第一次尝试Spring安全性,但确实遇到了这样一个问题:我有一个默认的网页,应该是默认的非身份验证网页,我有一批控制器调用,我想用一个预授权的注释来保护它。基本思想是,我想禁用默认的“重定向到登录页面”,但仍然有机会操作Spring Security的方法安全复合体 我使用的是java配置,它看起来像: @Configuration @EnableWebSecurity public class SpringWebSecurityConfig extends WebSecurityConfig

我第一次尝试Spring安全性,但确实遇到了这样一个问题:我有一个默认的网页,应该是默认的非身份验证网页,我有一批控制器调用,我想用一个预授权的注释来保护它。基本思想是,我想禁用默认的“重定向到登录页面”,但仍然有机会操作Spring Security的方法安全复合体

我使用的是java配置,它看起来像:

@Configuration
@EnableWebSecurity
public class SpringWebSecurityConfig extends WebSecurityConfigurerAdapter{
    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/res/**"); // #3
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.antMatcher("/**").authorizeRequests().anyRequest().permitAll();        
    }
}
我知道(或似乎理解)到目前为止,我所有的电话都应该被允许(在过去的两天里,我一直在考虑这个问题,显然没有什么想法了)

我想保护控制器的方法是:

@PreAuthorize("hasRole('ADMIN')")
@RequestMapping(value="/admin", method = RequestMethod.GET)
public String getAdminPage(Model model){
    return "admin";
}
我知道我可以使用antMatcher添加“/**/admin”并授权对特定url的调用,但总体思路是:

  • 禁用根目录上的“转到登录页”(以及其他随机控制器映射)
  • 从ajax下拉列表(或其他)中执行基于ajax的手动身份验证
  • 当一个随机的未授权用户在一个页面上颠簸时,该页面在控制器上有一个@PreAuthorized,然后,并且只有在那时,他才应该被重定向
  • UPD:基本问题是仅在拒绝访问的情况下调用重定向到登录页面,允许匿名角色进行基本站点视图和呼叫。

    回答我自己的问题(可能没有看上去那么干净)

  • 您可以配置Spring Security Http安全性,这样它就不会要求在每个页面上登录:

    @Override
    protected void configure(HttpSecurity http) throws Exception {
    
    http.antMatcher("/**").authorizeRequests().anyRequest().permitAll();
    
  • 要启用方法安全性(预授权(“hasRole('ADMIN'))和ect),需要添加注释:

    @EnableGlobalMethodSecurity(prePostEnabled = true)
    
  • 之后,您需要向HttpSecurity对象添加一些内容,以捕获“拒绝访问和ect”的异常(在其他stackoverflow问题线程中发现):

    现在,您可以使用@preauthorized保护控制器和其他组件。希望这能帮助别人

    但还有一件事——当用户未经授权,我试图访问某个预授权页面时,会调用上述异常处理程序,返回“unauthorized…”消息。但是,当用户获得授权并且我尝试一个具有不同预授权角色的页面时,我会得到默认的403访问拒绝

        http.exceptionHandling().authenticationEntryPoint(new AuthenticationEntryPoint() {
    
                @Override
                public void commence(HttpServletRequest request, HttpServletResponse response,
                        AuthenticationException authException) throws IOException, ServletException {
                    if (authException != null) {
                        response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
                        response.getWriter().print("Unauthorizated....");
                    }
                }
            });