我的应用程序有Spring boot 1.3.2,我正在尝试将Spring MVC与Spring Security结合使用。
我有管理小组http://localhost:8080/admin和我的普通用户页面内容http://localhost:8080/
如果你试图打开一个管理面板(http://localhost:8080/admin)你必须登录,如果你是常见的只需输入http://localhost:8080/和乐趣没有登录要求。
我的安全配置类:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
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;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("admin")
.password("password")
.roles("ADMIN");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/admin/**").hasRole("ADMIN")
.antMatchers("/**").permitAll()
.anyRequest().permitAll()
.and()
.formLogin()
.loginPage("/login");
}
}
上面的配置允许我要求从/admin登录,但我对管理面板功能有一些问题。
这是控制器,我试图从管理面板请求POST:
@RestController
@RequestMapping("/admin/v1")
public class AdminController {
@RequestMapping(value = "/logout", method = RequestMethod.POST)
public String logout(HttpServletRequest request, HttpServletResponse response) {
String hello = "hi!";
return hello;
}
}
所以我可以登录,浏览器为我渲染管理面板,但当我点击注销按钮时,它从上面的控制器请求POST注销方法。应用程序告诉我403禁止
谁能告诉我我做错了什么?
403禁止的错误很可能是因为Spring默认启用csrf保护。您可以在配置中禁用csrf,或在POST方法中包含csrf令牌。
在配置中禁用csrf:
http
.csrf().disable()
.authorizeRequests()
.antMatchers("/admin/**").hasRole("ADMIN")
.antMatchers("/**").permitAll()
.anyRequest().permitAll()
.and()
.formLogin()
.loginPage("/login")
.and()
.logout()
.logoutSuccessUrl("/admin/v1/logout");
在表格提交中包含CSRF代币:
<c:url var="logoutUrl" value="/admin/v1/logout"/>
<form action="${logoutUrl}" method="post">
<input type="submit" value="Log out" />
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
</form>
我使用angular2作为前端和Spring启动Rest控制器。在添加Spring安全性之前,我的应用程序工作正常。添加安全性后,带参数的函数不会在Spring启动Rest控制器中调用。下面是代码 在我加入spring security之前http://localhost:4200,所有这些都被称为“/jobcleanup”、“/jobcleanupclosedtickets”、“/JobClea
我正在测试家庭控制器 我使用spring security作为用户名“user”,默认情况下作为密码进行测试,但@PreAuthorize不起作用 的结果 预期结果: 实际结果: 我错过了什么吗?
我目前试图理解安全微服务的概念,并希望使用Spring Boot和Spring Security。 前端:通过oauth2提供程序+令牌检索登录。 我是否需要依赖一个我必须实现的自定义过滤器?本以为Spring靴和安全5的“魔力”会足够强大:D https://github.com/oktadeveloper/okta-spring-security-5-示例
本任务将演示如何通过使用Istio认证提供的服务账户,来安全地对服务做访问控制。 当Istio双向TLS认证打开时,服务器就会根据其证书来认证客户端,并从证书获取客户端的服务账户。服务账户在source.user的属性中。请参考Istio auth identity了解Istio中服务账户的格式。 开始之前 根据quick start的说明在开启认证的Kubernetes中安装Istio。注意,应
我正在开发一个新的应用程序,它是和camel。我将RESTendpoint作为该应用程序的一部分公开。 null 你能帮我选择更好的方案吗?
我面临的挑战是,我找不到一种方法来配置安全性,使到/profilesendpoint的POST请求不受保护,而GET或PUT的请求从提供的承载令牌传递到派生的@AuthenticationPrincipal中。 我想在API中设置以下内容:POST/profile创建新用户-无安全性GET/profile/{id}按id获取用户-需要管理员权限或用户是authd POST/password/res