spring security仅实现控制账号重复登录,有没有人有实例给我发一下

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring security仅实现控制账号重复登录,有没有人有实例给我发一下相关的知识,希望对你有一定的参考价值。

谢谢了 我的邮箱 9 0 5 4 0 6 9 3 6 @ q q . c o m

参考技术A Spring Security何控制权限概要 Spring使用由Filter组Chain判断权限图所示:Spring预定义out-of-boxed filter供发者直接使用每Filter般情况(些Filterabstract)都配置文件元素(情况能属性)应比:AUTHENTICATION_PROCESSING_FILTER应配置文件面:http/form-login元素 Spring提供Filter能满足系统权限功能发者自定义FilterFilter放某Filter Chain某位置替换掉原Filter Chain某Filter放某Filter前或者 总Spring Security采用Filter Chain模式判断权限Spring提供些Filter支持发者自定义Filter与WEB系统集 使用Java EEFilter(非SpringFilter)机制需要权限判断url牵引给SpringFilter Chain即 般情况所url都引入Filter Chainweb.xml配置需要权限判断url(配置filter-mapping/url-pattern)Spring配置文件支持滤掉需要权限判断url(配置http/intercept-url元素)控制内容 Spring Security提供内容控制:一. url;二. bean method;三. http session url:需要权限判断url需要权限判断url登录表单url通我spring相关帖参考文档阅读需要权限判断url仅限于做角色判断说判断前用户否具指定角色 bean method:Spring支持Service layer method做权限判断通我spring相关帖参考文档阅读仅限于做角色判断配置式二种:一. 写Java源代码面:@Secured("ROLE_TELLER")(该具TELLER角色用户能够访问否则抛异);二. 写配置文件面:(该bean所set具ADMIN角色用户能够访问否则抛异) http session:控制用户名否能重复登录及重复登录数并非重试密码数 另外Spring Security提供些功能:一. remember me记住我;二. form-login登录控制;三. 种身份认证功能;四. 用户密码加密salt功能;5. http协议控制;陆. 访问端口控制;漆. Pre-Invocation & After-Invocation remember me记住我:记浏览器采用cookie记住用户名密码自登录像(知道我理解错没应该没我敢相信)使用功能发者登录页面使用spring自定义标签 form-login登录控制:些页面允许匿名访问匿名访问些页面候弹(或者转)form-login窗口(或者页面)牵引二问题:一输入用户名密码验证;二密码否需要加密加密 种身份认证功能:Spring提供丰富用户身份认证功能身份认证意思比您告诉我我神仙我问您凭证明您神仙身份认证认证手段般保存数据库表用户名/密码usb keyldap等般情况我都使用用户名/密码 用户密码加密salt功能:密码采用md5sha加密算我密码加密候想仅仅密码加密想用户名密码放起加密做加密密码使用salt吧salt支持读取用户其属性仅用户名 http协议控制:哪些url必须采用https访问呢哪些url必须采用http访问呢哪些两者都呢通配置 访问端口控制:类似http协议控制控制url访问端口间关系 Pre-Invocation & After-Invocation:调用前做权限判断调用做权限判断呢般情况前调用情况调用具体例看官文档(二二.三节)细粒度权限控制 由面析我看url、method权限判断都仅限于用户角色权限判断事实Spring使用投票(Voter)机制做权限判断用户角色权限种投票投票词听起容易懂举例:董事各股东投票表决决议否通Spring角色投票器投票我平所说投票至少要二张票吧张叫投票Spring投票三种结:允许、拒绝弃权弃权真点晕呵呵种情况弃权 投票器何集SpringFilter面呢SpringFilter般都由Manager支撑着比accessDecisionManager由RoleVoterBasicAclEntryVoter提供投票accessDecisionManager根据RoleVoterBasicAclEntryVoter投票结做决策判断 细粒度(数据级)权限控制Spring Security提供种模型及相关实现面我简要说说模型举例:张三授权查询华北区域客户资料李四授权查询华南区域客户资料首先所客户记录做标示(相于取id)acl-entry表给张三授权华北所客户访问权限;给李四华南区域所客户权限表记录致:访问用户访问数据授权操作张三华北电力客户一读取张三华北电力客户二读取李四华南电力客户一读取………模型缺点非明显:一. 业务数据绑定死业务数据增/删需要维护该权限表;二. 数据量情况系统效率低 发者需要自书写投票器我理想权限管理客户权限管理需求 指我服务终用户软件发者客户权限管理需求体概括:一. 自主灵管理角色、角色权限并角色赋予系统相关用户;二. 数据安全系统展现数据满足权限系统内部搜索数据必须相应权限访问内系统数据进行增加、修改、删除必须满足权限;三. 没功能按钮、菜单、数据等等要界面现发遇难点 管理用户、角色、权限及三者间关系种典型RBAC模型非容易没任何困难 困难数据级权限控制业务直接挂钩复杂且经客户需求表达位、发员需求理解位、系统框架库表结构发变化断变化种变化仅需要编码且需要重新测试甚至种变化波及其模块甚至整系统系统发经历几变化代码面散布着if/else散布着sql语句导致bad smell我理想权限管理 我期望权限管理应该具几特性:一. 能实现角色级权限;能实现数据级权限;二. 简单、易操作能够应各种需求;三. 应需求变更能力强;四. 相关界面比权限管理界面、角色管理界面角色权限关系维护界面用户角色关系维护界面没界面接受毕竟些页面需要终用户使用同用户系统界面要求同我并期望统管理界面 Spring Security评价 Spring Security世界区哪些资源匿名访问哪些需要角色权限哪页面提供登录功能;进行用户身份认证用户密码何加密哪些资源必须使用https协议资源访问端口应关系 面优点缺点Spring Security进行点评优点 总体说Spring Security具几优点:一. 提供套权限框架套框架行;二. 提供用户身份认证功能节约量发工作;三. 提供角色判断功能点既优点缺点;四. 提供form-login、remember me等控制 其二、四两点于我发者(我外系统解)用性并我系统采用用户名/密码身份认证模式公司都复用代码form-login、remember me等些功能并难发且用处并缺点 我认Spring Security存几硬伤:一. 角色编码配置文件源文件终用户能创建角色终用户期望自控制角色项目实施程客户能并能确定哪些角色及角色配给系统用户角色需要等系统线才能确定些编码:a) url权限控制;b) java权限控制@Secured("IS_AUTHENTICATED_ANONYMOUSLY");c) java权限控制;二. RBCA种广泛运用模型没Spring Security体现;三. Spring Security没提供细粒度(数据级)权限案提供缺省实现维护工作量数据量情况几乎用;四. Spring Security于用户、角色、权限间关系没提供任何种维护界面Spring Security角度看确实没必要界面角色创建、角色权限直接关系都编码配置文件源文件;5. Spring Security习难度配置文件我承认高手我看新加入软件发领域付习代价获点点处觉并值 附言:本JavaEye创建权限管理圈快二周吸引少中国友进我高兴荣幸由于Spring Security运用范围比较广所我打算习习经验家追问

我需要一个实例啊 哥

Spring Security 中仅使用自定义 UserDetailsS​​ervice 禁止 403 [重复]

【中文标题】Spring Security 中仅使用自定义 UserDetailsS​​ervice 禁止 403 [重复]【英文标题】:403 forbidden in Spring Security with Custom UserDetailsService only [duplicate] 【发布时间】:2021-10-01 03:11:10 【问题描述】:

我在 Spring Security 的 Spring Boot 项目中有以下文件。当我使用 inMemoryAuthentication 时它可以工作,但是当我使用自定义 UserDetailsS​​ervice 时它不起作用。自定义 UserDetailsS​​ervice 类被调用,但它仍然给出 403(当我尝试访问 /user 时),但它适用于打开的 url (/usr)。

import org.springframework.security.core.userdetails.User

@Service
public class UserDetailsServiceImpl implements UserDetailsService 

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException 

        //not using parameter which is being passed as trying to figure out the problem first.

        UserDetails user = User.withUsername("abc").password("abc").authorities("ADMIN").build();
        return user;
        
    


@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter 

    @Autowired
    UserDetailsServiceImpl userDetailsService;

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception 
        auth.userDetailsService(userDetailsService).passwordEncoder(getPasswordEncoder());
//      auth.inMemoryAuthentication().withUser("abc").password("abc").roles("ADMIN");
    

    @Bean
    public PasswordEncoder getPasswordEncoder() 
        return NoOpPasswordEncoder.getInstance();
    

    @Override
    protected void configure(HttpSecurity http) throws Exception 
        http.authorizeRequests()
        .antMatchers("/api/user").hasRole("ADMIN")
        .antMatchers("/").permitAll()
        .and().formLogin();
    


@RestController
@RequestMapping("/api")
public class UserController 

    @GetMapping("/usr")
    public ResponseEntity<String> getOpenResponse() 
        return ResponseEntity.ok("You are accessing open url");
    

    @GetMapping("/user")
    public ResponseEntity<String> getSecuredResponse() 
        return ResponseEntity.ok("You are accessing secured path");
    


我在这里做错了什么?我错过了什么吗?

【问题讨论】:

【参考方案1】:

问题就在这里:

UserDetails user = User.withUsername("abc").password("abc").authorities("ADMIN").build();

您将用户的权限设置为"ADMIN",但在SecurityConfig 类中,您希望用户具有角色 "ADMIN",实际上,这是获得以下权限的快捷方式"ROLE_ADMIN"

http.authorizeRequests()
    .antMatchers("/api/user").hasRole("ADMIN")

要解决这个问题,你应该定义用户的角色:

User.withUsername("abc").password("abc").roles("ADMIN")

【讨论】:

以上是关于spring security仅实现控制账号重复登录,有没有人有实例给我发一下的主要内容,如果未能解决你的问题,请参考以下文章

Spring Security 中仅使用自定义 UserDetailsS​​ervice 禁止 403 [重复]

Spring Cloud 值Spring-Security

spring security oauth2.0 实现

spring security oauth2.0 实现

Spring security - 未调用自定义 userDetailsS​​ervice 实现

仅使用 Spring Security 自定义令牌无状态保护 REST 控制器,同时保持常规状态完整 Web 登录正常工作