近期想在HTML页面直接引用shiro安全框架登录成功后的用户名,因为shiro会自动保存当前用户信息在session中,因为初次使用,想着有什么快捷方式去引用shiro的用户名的值,于是乎我搜索了很久,
- 网上很多解决方法是:
<shiro:principal property="username"/>
, - 还需要在HTML标签添加:
xmlns:shiro="http://www.pollix.at/thymeleaf/shiro"
- 然后,还需要在pom文件中添加依赖:
<dependency>
<groupId>com.github.theborakompanioni</groupId>
<artifactId>thymeleaf-extras-shiro</artifactId>
<version>2.0.0</version>
</dependency>
but,不管用,前端页面还是没有显示出来!!!!
但想了想,最根本的是前端页面想要取后端数据,比较管用的还是在controller层携带参数。
- 想取到shiro的用户信息,使用:
SecurityUtils.getSubject().getPrincipal();
这个是shiro里的方法,以下为controller代码示例:
import com.neo.model.UserInfo;
import org.apache.shiro.SecurityUtils;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class HelloController {
@RequestMapping("/")
public String index(Model model) {
UserInfo userInfo = (UserInfo) SecurityUtils.getSubject().getPrincipal();
model.addAttribute("name", userInfo.getName());
return "hello";
}
}
- 然后,前端HTML代码中,轻松取了:
<span class="navbar-brand" th:text="|${name},您好!|">hello!</span>
HTML局部代码如下:
<nav class="navbar navbar-default" role="navigation">
<div class="container-fluid">
<div class="navbar-header">
<!-- <shiro:principal property="username"/>不管用!!!!-->
<span class="navbar-brand" th:text="|${name},您好!|">hello!</span>
</div>
<div>
<ul class="nav navbar-nav">
<li class="active"><a th:href="@{/list}">iOS</a></li>
<li><a th:href="@{/list}">SVN</a></li>
<li class="dropdown">
<button class="dropdown-toggle" data-toggle="dropdown">
Java
<b class="caret"></b>
</button>
<ul class="dropdown-menu">
<li><a th:href="@{/list}">jmeter</a></li>
<li><a th:href="@{/list}">EJB</a></li>
<li><a th:href="@{/list}">Jasper Report</a></li>
<li class="divider"></li>
<li><a th:href="@{/list}">分离的链接</a></li>
<li class="divider"></li>
<li><a th:href="@{/list}">另一个分离的链接</a></li>
</ul>
</li>
</ul>
</div>
</div>
</nav>
- 前端效果展示: