若依去掉鉴权,允许外部访问(java后端)

本文介绍了如何在SpringSecurity的SecurityConfig中修改匿名访问设置,将`/login`和`/captchaImage`的匿名访问权限移除,仅对`/admins/**`路径开放。同时,文中展示了如何修改PermissionService中的hasAnyRoles方法,使其始终返回true,以便于访问控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.SecurityConfig中配置匿名访问

注释掉

.antMatchers("/login", "/captchaImage").anonymous()

 修改为

.antMatchers("/admins/**").anonymous()

具体位置如图:

 2.修改PermissionService

注释掉其中的hasrole方法,返回值false改为返回true;

public boolean hasAnyRoles(String roles)
    {
        if (StringUtils.isEmpty(roles))
        {
//            return false;
            return true;
        }
        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
//        if (loginUser==null || CollectionUtils.isEmpty(loginUser.getUser().getRoles()))
//        {
//            return false;
//        }
//        for (String role : roles.split(ROLE_DELIMETER))
//        {
//            if (hasRole(role))
//            {
//                return true;
//            }
//        }
        return true;
//        return false;
    }

图片:

重启项目,即可访问成功

本文仅为学习和研究目的而提供,不涉及任何商业应用。我们坚决反对任何形式的侵权行为,并尊重他人的知识产权。若您发现本文内容存在任何侵犯您权益的情况,请通过电子邮件联系我们:2907205361@qq.com。我们将尽快处理并采取措施,以确保知识产权得到妥善保护。感谢您的理解和支持。

### 若依框架登录功能实现及解决方案 #### 登录功能的核心流程 若依框架的登录功能主要依赖于Spring Security进行权限管理以及JWT(JSON Web Token)技术完成身份验证和授。具体来说,用户的登录请求会通过`LoginController`中的`login`方法处理[^3]。 以下是登录功能的主要逻辑: 1. 用户提交用户名和密码至服务器。 2. 后台调用`UserDetailsServiceImpl.loadUserByUsername()`加载用户信息并校验密码是否匹配。 3. 如果认证成功,则生成JWT令牌并通过响应返回给客户端。 4. 客户端保存该令牌,在后续每次请求中将其作为Authorization头发送回服务端用于。 ```java @RestController public class LoginController { @Autowired private AuthenticationManager authenticationManager; @PostMapping("/login") public AjaxResult login(@RequestBody LoginBody loginBody) { try { // 认证过程 Authentication authentication = authenticationManager.authenticate( new UsernamePasswordAuthenticationToken(loginBody.getUsername(), loginBody.getPassword()) ); // 获取当前登录用户详情 UserDetails userDetails = (UserDetails) authentication.getPrincipal(); // 生成 token String token = JwtUtil.createToken(userDetails); return R.ok().put("token", token); // 返回带签名的 JWT 给前端 } catch (Exception e) { return R.error("用户名或密码错误"); } } } ``` #### 常见问题及其解决方案 ##### 1. **Swagger 文档无法显示响应参数** 在开发过程中可能会遇到 Swagger 文档不展示某些接口的具体字段描述的情况。这是因为部分自定义类未被正确解析所致。最终解决方案是调整接口返回值类型为 `R<T>` 而不是 `AjaxResult`[^4]。 例如原代码可能如下所示: ```java return AjaxResult.success(token); ``` 改为使用统一的结果封装对象 `R`: ```java return R.ok().put("data", token); ``` 这样既保持了前后端交互的一致性,也使得 swagger 的文档能够清晰地呈现 API 结构。 ##### 2. **跨域访问失败** 当项目采用前后端分离架构时,浏览器默认阻止来自不同源的资源加载操作。此时需配置 CORS 支持以允许特定域名下的页面发起 HTTP 请求。 可以在 Spring Boot 配置文件中添加全局设置或者单独针对某个 Controller 进行局部设定: ```properties spring.mvc.cors.allowed-origins=http://localhost:8080 spring.mvc.cors.allowed-methods=GET,POST,PUT,DELETE spring.mvc.cors.allowed-headers=Content-Type,X-Requested-With,Accept,Origin,Access-Control-Allow-Credentials,Authorization ``` ##### 3. **Session 失效过早** 由于采用了无状态设计模式,默认情况下不会存储 session 数据,因此需要合理规划 token 生命周期。可以通过修改 Redis 中 key-value 对的有效期来延长在线时间[^2]。 ```java stringRedisTemplate.expire(key, timeout, TimeUnit.MINUTES); ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值