Tag: spring security

Spring Security JAAS身份validation授权问题

在Spring Security中,使用DefaultJaasAuthenticationProvider配置进行Linux用户名/密码的登录validation。 JpamLoginModule用于身份validation。 我成功通过身份validation,但我在授权方面遇到问题(ROLE_USER,ROLE_ADMIN),我正在获取HTTP状态403 – 访问被拒绝错误。 以下配置我在spring-security.xml中使用 RoleGranter.java代码 public class RoleGranter implements AuthorityGranter { public RoleGranter() { System.out.print(“=== Creating My Authority Granter ===”); } @Override public Set grant(Principal principal) { return Collections.singleton(“ROLE_ADMIN”); } } 建议会非常有帮助

SSO,未知

我开始为我们生产的3个不同的webapps开发SSO解决方案,并且仍然为同一个客户端维护。 事实上,所有3个人通过第四个单独的应用程序将他们的用户和登录信息存储在同一个地方,该应用程序只提供基本的restful api服务。 这基本上意味着当一个人试图登录时,我们实际上会调用其他服务来询问这个用户名和密码是否正确。 在某种程度上,这第四个宁静的东西已经完成了至少一半我们需要的工作。 我们现在需要的是一种方法,让用户登录webapp A,然后按照链接(或简单地键入其URL)到webapp B(或简单地键入其URL)并到达那里已经记录 (或反之亦然)。 我一直在阅读很多有关CAS和openID甚至是oauth的内容,但我无法真正决定它。 这种模式是集中的吗? 分散的? 我的一万英尺的视图表明,我会以某种方式只需要将这个“缺失的function”添加到我们的restful api服务器中。 但是怎么样? ps:这3个完全分开。 部署在不同的机器上(其中2台在glassfish上运行,另一台在tomcat上运行)。 也是不同的领域。 pps:它们都是弹簧驱动的webapps(因此它们使用spring-security ) ppps:截至今天,还有其他webapps使用我们的restul api(非spring,非java)。 这个解决方案可能必须准备好处理这些。

Spring安全性@secure不使用角色层次结构

我在spring security spring-securityConfig.xml使用spring security中的角色层次结构 ROLE_ADMIN > ROLE_WORKFLOW ROLE_ADMIN > ROLE_ISBN_INSERTION ROLE_ADMIN > ROLE_PERMISSION_UPDATE ROLE_ADMIN > ROLE_ASSIGNMENT ROLE_ADMIN > ROLE_CALIBRATION ${ldap.userDnPatterns} 在服务方法中,我使用@Secured({ “ROLE_PERMISSION_UPDATE”})如果具有角色ROLE_ADMIN的用户登录到应用程序并尝试访问此安全方法,则它会抛出访问被拒绝的exception。

如何在Spring中为html创建视图解析器?

我决定创建一个没有JSP的web-app,但只使用位于WEB-INF / pages目录下的HTML页面,我遇到了这个问题。 我已经制作了视图解析器: 我还导入了WEB-INF / pages中的所有资源: 我的控制器有以下视图: @PreAuthorize(“isAuthenticated()”) @RequestMapping(“/”) public String indexPage() { return “redirect:/index.html”; } 它适用于映射“/”(如果未经过身份validation,则重定向到登录页面),但由于将此页面作为静态资源导入,因此对于URL“/index.html”不安全(但如果不是,它将无法正常工作)导入它)。

限制某些数据访问的正确方法是什么

我正在开发一个应用程序,每个员工都有自己的客户。 当员工想要显示,修改或删除客户时,我想确保该客户是该员工之一。 这是因为做这些动作的url就像 www.xxx.com/customers/update/{idCustomer} 我现在有效访问客户的方式是通过服务调用(具有数据库访问权限)来确保该客户是该员工之一。 此应用程序是使用Spring Security在Spring MVC中编写的。 我想知道是否有更好的方法来进行相同的限制访问?

配置Activiti以重用Spring Boot中的现有用户/组数据

我正在使用Spring Boot 1.4.3.RELEASE。 我已经创建了一个简单的MVC应用程序来管理用户和组。 现在,我正在尝试将Activiti 5.21.0集成到我的项目中,并重新使用 Activiti的现有用户/组表。 我已经从Activiti扩展了默认的UserEntityManager和GroupEntityManager类,如下所示: CustomUserEntityManager.java import java.util.List; import org.activiti.engine.impl.Page; import org.activiti.engine.impl.UserQueryImpl; import org.activiti.engine.impl.persistence.entity.IdentityInfoEntity; import org.activiti.engine.impl.persistence.entity.UserEntity; import org.activiti.engine.impl.persistence.entity.UserEntityManager; import com.example.spring.dao.UserDao; import com.example.spring.model.User; public class CustomUserEntityManager extends UserEntityManager { private UserDao userDao; public CustomUserEntityManager(UserDao userDao) { this.userDao = userDao; } @Override public UserEntity findUserById(String userId) { User user = userDao.findById(Integer.parseInt(userId)); return userToActivitiUser(user); } […]

为可信空间定制Spring Security

服务在可信空间中的网关之后工作(gateWayvalidationOAuth令牌并仅向服务提供唯一的用户ID,其他情况下它重定向以validation服务)。 我想在服务中使用spring security来validationuserId的权限。 所以我添加了CustomUserDetailsService @Service( “的UserDetailsS​​ervice”) 公共类CustomUserDetailsS​​ervice实现UserDetailsS​​ervice { @Autowired(required = false) private ContextSsoActiveProfileIdProvider contextSsoActiveProfileIdProvider; @Autowired private GrantedAuthorityService grantAuthorityService; @覆盖 public User loadUserByUsername(final String username)throws UsernameNotFoundException { //使用身份validation服务validation它,但没有令牌,仅限userId,因此信任网关服务。 返回新用户( 将String.valueOf(contextSsoActiveProfileIdProvider.getSsoActiveProfileId()), “authenticatedWithGateWay” grantedAuthorityService.getGrantedAuthoritiesForCurrentUser() ); } } 其中contextSsoActiveProfileIdProvider.getSsoActiveProfileId()返回uniqueUserId和grantedAuthorityService.getGrantedAuthoritiesForCurrentUser()返回权限。 该服务在受信任区域中启动,因此我已通过下一步方式配置安全性: @EnableWebSecurity @组态 公共类SecurityConfiguration扩展了WebSecurityConfigurerAdapter { @Autowired private UserDetailsS​​ervice userDetailsS​​ervice; @覆盖 protected void configure(HttpSecurity http)抛出Exception { HTTP .authorizeRequests() .antMatchers( “/ **”)permitAll(); […]

ResourceOwnerPasswordResourceDetails – 传递clientid和secret以生成oauth2令牌

我按照此问题中提到的接受的答案生成OAuth2令牌。 但是我收到HTTP 401响应。 当我调试时,我看到clientid和clientsecret不作为HTTP请求中表单的一部分传递。 我只看到下面列出的值被传递。 为了通过clientid和clientsecret ,我还应该做些什么吗? {grant_type=[password], username=[username], password=[password]}

如何告诉spring security仅为特定端口应用authorizeRequests?

我们以官方API在端口8080(在我们的虚拟网络之外映射到端口443上的普通HTTPS)的方式配置我们的新微服务(使用Spring-Boot),而一些管理function在辅助HTTP上端口7979.这些只在虚拟网络中使用,用于监控,负载均衡等。 所有API访问都需要使用OAuth保护,而管理function应该可以在网络内自由访问。 所以我们用这种方式配置Spring安全性(http是一个HttpSecurity对象): http .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.NEVER) .and() .authorizeRequests() .antMatchers(“/info”).anonymous() .antMatchers(“/health”).anonymous() .antMatchers(HttpMethod.GET, “/warehouses/**”).access(oauthScopeRead) .antMatchers(HttpMethod.PUT, “/warehouses/**”).access(oauthScopeWrite) .anyRequest().denyAll(); 这对两个端口都有影响: /info和/health是未授权的,而/warehouses需要身份validation,其他一切也需要身份validation(返回401,但是在使用身份validation调用时,它返回403)。 由于公共端口上没有/info或/health ,因此未经授权的用户返回404,而其他所有用户返回401.我对此不满意并希望拥有 在公共端口上,要求对所有内容进行身份validation(并且仅在经过身份validation后返回404或403) 在管理端口上,根本不需要身份validation(对于不是其中一个配置端点的所有内容,返回404)。 我在Spring Security Javadocs或参考文档中找不到任何有关端口的信息 。 我能在这做什么?

创建自定义方法安全表达式的最佳方法

我正在尝试创建自己的方法安全表达式,我想在@PreFilter和@PostFilter注释中使用它。 在搜索教程和类似问题时,我发现了两种方法。 第一种是扩展DefaultMethodSecurityExpressionHandler并覆盖createSecurityExpressionRoot ,以便提供自定义的SecurityExpressionRoot 。 @PreAuthorize(‘isOwner(#someEntity)’) 第二种方法是简单地使用@Component类并在@Pre / @Postfilter中使用@bean.method()访问其方法 @PreAuthorize(“@mySecurityService.isOwner(‘#someEntityl’)”) 我的问题是:哪种方式首选? 如果两者都可以,为什么选择另一个? 谢谢Marco