WebStartView.java
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.shiro.samples.spring.ui;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.*;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.core.io.ClassPathResource;
import org.apache.shiro.authz.AuthorizationException;
import org.apache.shiro.samples.spring.SampleManager;
/**
* Simple web start application that helps to demo single sign-on and
* remoting authorization using Shiro. The injected <tt>SampleManager</tt>
* is hosted by the Spring sample web application and remotely invoked
* when the buttons in this view are clicked.
*
* @since 0.1
*/
public class WebStartView implements ActionListener, InitializingBean {
/*--------------------------------------------
| C O N S T A N T S |
============================================*/
/*--------------------------------------------
| I N S T A N C E V A R I A B L E S |
============================================*/
private SampleManager sampleManager;
private JTextField valueField;
private JButton saveButton;
private JButton refreshButton;
private JButton secureMethod1Button;
private JButton secureMethod2Button;
private JButton secureMethod3Button;
private JFrame frame;
/*--------------------------------------------
| C O N S T R U C T O R S |
============================================*/
/*--------------------------------------------
| A C C E S S O R S / M O D I F I E R S |
============================================*/
public void setSampleManager(SampleManager sampleManager) {
this.sampleManager = sampleManager;
}
/*--------------------------------------------
| M E T H O D S |
============================================*/
public void afterPropertiesSet() throws Exception {
ClassPathResource resource = new ClassPathResource("logo.png");
ImageIcon icon = new ImageIcon(resource.getURL());
JLabel logo = new JLabel(icon);
valueField = new JTextField(20);
updateValueLabel();
saveButton = new JButton("Save Value");
saveButton.addActionListener(this);
refreshButton = new JButton("Refresh Value");
refreshButton.addActionListener(this);
JPanel valuePanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
valuePanel.add(valueField);
valuePanel.add(saveButton);
valuePanel.add(refreshButton);
secureMethod1Button = new JButton("Method #1");
secureMethod1Button.addActionListener(this);
secureMethod2Button = new JButton("Method #2");
secureMethod2Button.addActionListener(this);
secureMethod3Button = new JButton("Method #3");
secureMethod3Button.addActionListener(this);
JPanel methodPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
methodPanel.add(secureMethod1Button);
methodPanel.add(secureMethod2Button);
methodPanel.add(secureMethod3Button);
frame = new JFrame("Apache Shiro Sample Application");
frame.setSize(500, 200);
Container panel = frame.getContentPane();
panel.setLayout(new BorderLayout());
panel.add(logo, BorderLayout.NORTH);
panel.add(valuePanel, BorderLayout.CENTER);
panel.add(methodPanel, BorderLayout.SOUTH);
frame.setVisible(true);
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
private void updateValueLabel() {
valueField.setText(sampleManager.getValue());
}
public void actionPerformed(ActionEvent e) {
try {
if (e.getSource() == saveButton) {
sampleManager.setValue(valueField.getText());
} else if (e.getSource() == refreshButton) {
updateValueLabel();
} else if (e.getSource() == secureMethod1Button) {
sampleManager.secureMethod1();
JOptionPane.showMessageDialog(frame, "Method #1 successfully called.", "Success", JOptionPane.INFORMATION_MESSAGE);
} else if (e.getSource() == secureMethod2Button) {
sampleManager.secureMethod2();
JOptionPane.showMessageDialog(frame, "Method #2 successfully called.", "Success", JOptionPane.INFORMATION_MESSAGE);
} else if (e.getSource() == secureMethod3Button) {
sampleManager.secureMethod3();
JOptionPane.showMessageDialog(frame, "Method #3 successfully called.", "Success", JOptionPane.INFORMATION_MESSAGE);
} else {
throw new RuntimeException("Unexpected action event from source: " + e.getSource());
}
} catch (AuthorizationException ae) {
JOptionPane.showMessageDialog(frame, "Unauthorized to perform action: " + ae.getMessage(), "Unauthorized", JOptionPane.WARNING_MESSAGE);
}
}
}