1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.shiro.samples.spring.web;
20
21 import java.util.HashMap;
22 import java.util.Map;
23 import javax.annotation.Resource;
24 import javax.servlet.http.HttpServletRequest;
25 import javax.servlet.http.HttpServletResponse;
26
27 import org.springframework.stereotype.Component;
28 import org.springframework.web.bind.annotation.RequestMapping;
29 import org.springframework.web.bind.annotation.RequestMethod;
30 import org.springframework.web.servlet.ModelAndView;
31 import org.springframework.web.servlet.mvc.AbstractController;
32
33 import org.apache.shiro.SecurityUtils;
34 import org.apache.shiro.session.Session;
35 import org.apache.shiro.subject.Subject;
36
37
38
39
40
41
42
43 @Component
44 @RequestMapping("/s/shiro.jnlp")
45 public class JnlpController extends AbstractController {
46
47
48
49
50
51
52
53
54 private String jnlpView = "shiro.jnlp";
55
56
57
58
59
60
61
62
63
64 public void setJnlpView(String jnlpView) {
65 this.jnlpView = jnlpView;
66 }
67
68
69
70
71
72 @RequestMapping(method = RequestMethod.GET)
73 protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception {
74
75 Subject subject = SecurityUtils.getSubject();
76 Session session = null;
77
78 if (subject != null) {
79 session = subject.getSession();
80 }
81 if (session == null) {
82 String msg = "Expected a non-null Shiro session.";
83 throw new IllegalArgumentException(msg);
84 }
85
86 StringBuilder sb = new StringBuilder();
87 sb.append("http://");
88 sb.append(request.getServerName());
89 if (request.getServerPort() != 80) {
90 sb.append(":");
91 sb.append(request.getServerPort());
92 }
93 sb.append(request.getContextPath());
94
95
96 response.setHeader("cache-control", "no-cache");
97 response.setHeader("pragma", "no-cache");
98
99 Map<String, Object> model = new HashMap<String, Object>();
100 model.put("codebaseUrl", sb.toString());
101 model.put("sessionId", session.getId());
102 return new ModelAndView(jnlpView, model);
103 }
104 }