Skip to content

Commit da7089c

Browse files
committed
第二十章
1 parent 9b6e53b commit da7089c

5 files changed

Lines changed: 21 additions & 13 deletions

File tree

shiro-example-chapter20/src/main/java/com/github/zhangkaitao/shiro/chapter20/filter/StatelessAuthcFilter.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,27 +25,32 @@ protected boolean isAccessAllowed(ServletRequest request, ServletResponse respon
2525

2626
@Override
2727
protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception {
28+
//1、客户端生成的消息摘要
2829
String clientDigest = request.getParameter(Constants.PARAM_DIGEST);
30+
//2、客户端传入的用户身份
2931
String username = request.getParameter(Constants.PARAM_USERNAME);
32+
//3、客户端请求的参数列表
3033
Map<String, String[]> params = new HashMap<String, String[]>(request.getParameterMap());
3134
params.remove(Constants.PARAM_DIGEST);
3235

36+
//4、生成无状态Token
3337
StatelessToken token = new StatelessToken(username, params, clientDigest);
3438

3539
try {
40+
//5、委托给Realm进行登录
3641
getSubject(request, response).login(token);
3742
} catch (Exception e) {
3843
e.printStackTrace();
39-
onLoginFail(response);
44+
onLoginFail(response); //6、登录失败
4045
return false;
4146
}
4247
return true;
4348
}
4449

50+
//登录失败时默认返回401状态码
4551
private void onLoginFail(ServletResponse response) throws IOException {
4652
HttpServletResponse httpResponse = (HttpServletResponse) response;
4753
httpResponse.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
4854
httpResponse.getWriter().write("login error");
4955
}
50-
5156
}

shiro-example-chapter20/src/main/java/com/github/zhangkaitao/shiro/chapter20/realm/StatelessRealm.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,34 +16,36 @@
1616
* <p>Version: 1.0
1717
*/
1818
public class StatelessRealm extends AuthorizingRealm {
19-
2019
@Override
2120
public boolean supports(AuthenticationToken token) {
21+
//仅支持StatelessToken类型的Token
2222
return token instanceof StatelessToken;
2323
}
24-
2524
@Override
2625
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
27-
//根据用户名查找角色
26+
//根据用户名查找角色,请根据需求实现
2827
String username = (String) principals.getPrimaryPrincipal();
2928
SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();
3029
authorizationInfo.addRole("admin");
3130
return authorizationInfo;
3231
}
33-
3432
@Override
3533
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
3634
StatelessToken statelessToken = (StatelessToken) token;
3735
String username = statelessToken.getUsername();
38-
String key = getKey(username);
36+
String key = getKey(username);//根据用户名获取密钥(和客户端的一样)
37+
//在服务器端生成客户端参数消息摘要
3938
String serverDigest = HmacSHA256Utils.digest(key, statelessToken.getParams());
39+
System.out.println(statelessToken.getClientDigest());
40+
System.out.println(serverDigest);
41+
//然后进行客户端消息摘要和服务器端消息摘要的匹配
4042
return new SimpleAuthenticationInfo(
4143
username,
4244
serverDigest,
4345
getName());
4446
}
4547

46-
private String getKey(String username) {
48+
private String getKey(String username) {//得到密钥,此处硬编码一个
4749
if("admin".equals(username)) {
4850
return "dadadswdewq2ewdwqdwadsadasd";
4951
}

shiro-example-chapter20/src/main/resources/spring-config-shiro.xml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,15 @@
88
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd
99
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
1010

11-
<!-- Realm实现 -->
11+
<!-- Realm实现 -->
1212
<bean id="statelessRealm" class="com.github.zhangkaitao.shiro.chapter20.realm.StatelessRealm">
1313
<property name="cachingEnabled" value="false"/>
1414
</bean>
1515

16+
<!-- Subject工厂 -->
1617
<bean id="subjectFactory" class="com.github.zhangkaitao.shiro.chapter20.mgt.StatelessDefaultSubjectFactory"/>
1718

19+
<!-- 会话管理器 -->
1820
<bean id="sessionManager" class="org.apache.shiro.session.mgt.DefaultSessionManager">
1921
<property name="sessionValidationSchedulerEnabled" value="false"/>
2022
</bean>

shiro-example-chapter20/src/main/resources/spring-mvc.xml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
expression="org.springframework.web.bind.annotation.ControllerAdvice"/>
2020
</context:component-scan>
2121

22+
<mvc:annotation-driven/>
2223

23-
<mvc:annotation-driven>
24-
</mvc:annotation-driven>
2524
</beans>

shiro-example-chapter20/src/test/java/com/github/zhangkaitao/shiro/chapter20/ClientTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public void testServiceHelloSuccess() {
5555
params.add(Constants.PARAM_DIGEST, HmacSHA256Utils.digest(key, params));
5656

5757
String url = UriComponentsBuilder
58-
.fromHttpUrl("http://localhost:8080/hello1")
58+
.fromHttpUrl("http://localhost:8080/hello")
5959
.queryParams(params).build().toUriString();
6060

6161
ResponseEntity responseEntity = restTemplate.getForEntity(url, String.class);
@@ -78,7 +78,7 @@ public void testServiceHelloFail() {
7878
params.set("param2", param2 + "1");
7979

8080
String url = UriComponentsBuilder
81-
.fromHttpUrl("http://localhost:8080/hello1")
81+
.fromHttpUrl("http://localhost:8080/hello")
8282
.queryParams(params).build().toUriString();
8383

8484
try {

0 commit comments

Comments
 (0)